現在の時刻の差をミリ秒単位で取得しているとします。与えられたランダムな値をJavaの0 - 1の範囲に正規化します
double value = Calendar.getInstance().getTimeInMillis() - getMilliseconds(reportingDt);
だから、これは非常に大きな値になります。いくつかのいずれかが私の値は、より最近の0と1
の間でスケールされるように、これは、Javaで実現する方法を提案することができますしてください1.
- 今私は0のスケールに、それを正規化したいですreportingDtは、最終的な値は、1歳以上の方にreportingDtは、より多くのそれはまあ0
UPDATE
に向けて、それは以下のようにした正規化に向けた私のアプローチですよりです。これはもっとプロトタイプですが、それは私のために働いていました。
private double getDocumentScore(String reportingDt) {
Date offset = null;
try {
offset = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS").parse("24-08-2017 13:53:30.802");
} catch (ParseException e) {
e.printStackTrace();
}
long currentTime = Calendar.getInstance().getTimeInMillis();
if(offset != null) {
// If offset is set then instead of current datetime consider offset
currentTime = offset.getTime();
}
System.out.println(reportingDt);
long value = currentTime - getMilliseconds(reportingDt);
long minutes = TimeUnit.MILLISECONDS.toMinutes(value);
double score = 2 * (1/Math.log(minutes));
System.out.println(score);
return score;
}
private long getMilliseconds(String dateTime) {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS");
Date date = null;
try {
date = formatter.parse(dateTime);
} catch (ParseException e) {
e.printStackTrace();
}
return date.getTime();
}
サンプル入力日付と出力の正規化スコア値を以下
11-07-2017 14:34:05.416
0.18089822028334113
11-07-2017 14:34:06.023
0.18089822028334113
11-07-2017 14:34:06.595
0.18089822028334113
11-07-2017 14:34:07.139
0.18089822028334113
11-07-2017 14:34:08.873
0.18089822028334113
11-07-2017 14:34:11.171
0.18089822028334113
11-07-2017 14:34:12.954
0.18089822028334113
11-07-2017 14:34:12.962
0.18089822028334113
11-07-2017 14:34:34.516
0.18089847869291217
11-07-2017 14:34:35.720
0.18089847869291217
11-07-2017 14:34:38.566
0.18089847869291217
11-07-2017 14:34:39.205
0.18089847869291217
11-07-2017 14:34:40.357
0.18089847869291217
たiが値を正規化すると考えられ、様々なスコア関数のグラフプロットです。最終的に私は緑のライン1を使用(2 *(1 /ログ(X)))
好きですか?定義された範囲がなければ、正規化することができないので、まずそれについて考えることができます。 –
@ OHGODSPIDERS私はすべての値を取得し、リストに入れて、最小値と最大値を見つけることができます。したがって、範囲があります。 –
これは別の方法で行うことができます。さらに最近の 'reportingDt'は0に近く、1に向かっては1に向かって古いことができます.'Calendar.getInstance()。getTimeInMillis()によって最終値を分けることでできます。 –