/** 最小最大规范化也叫离差标准化
* 可以对原始数据进行线性变换,
* 假定Min和Max是最小值和最大值,
* v是该区间中的一个值,将其映射到新的区间[newMin, newMax]中为v'
* 则有:
* v' = (v-Min)/(Max-Min)*(newMax-newMin)+newMin
* 这种方法有一个缺陷就是当有新数据加入时,可能导致Max和Min的变化,需要重新定义。
*/
package re;
public class MinMaxNormalization {
public static void main(String[] args) {
MinMaxNormalization mmn = new MinMaxNormalization();
double newV = mmn.Normalization(1500, 1000, 2000, 0, 1);
System.out.println("The result is " + newV);
newV = mmn.Normalization(1501, 1000, 2000, 0, 1);
System.out.println("The result is " + newV);
newV = mmn.Normalization(1600, 1000, 2000, 0, 1);
System.out.println("The result is " + newV);
}
/**
* @author
* @param v
* 做标准化的样本数据
* @param Min
* 样本数据最小值
* @param Max
* 样本数据最大值
* @param newMin
* 新的映射区间最小值
* @param newMax
* 新的映射区间最大值
* @return
*/
public double Normalization(double v, double Min, double Max,
double newMin, double newMax) {
return (v - Min) / (Max - Min) * (newMax - newMin) + newMin;
}
}
http://blog.csdn.net/kindterry/article/details/6581347
package re;
public class Snippet {
public static void main(String[] args) {
System.out.println("0: \t" + sigmoid(0d));
System.out.println("1: \t" + sigmoid(1d));
System.out.println("2: \t" + sigmoid(2d));
System.out.println("3: \t" + sigmoid(3d));
System.out.println("10: \t" + sigmoid(10d));
System.out.println("100: \t" + sigmoid(100d));
System.out.println("1000: \t" + sigmoid(1000d));
System.out.println("10000: \t" + sigmoid(10000d));
System.out.println("100000: \t" + sigmoid(100000d));
System.out.println("1000000: \t" + sigmoid(1000000d));
System.out.println("10000000: \t" + sigmoid(10000000d));
System.out.println("10000000: \t" + sigmoid(10000000000d));
}
public static double sigmoid(double val) {
//_score * (1d / (1d + exp(-log(doc['saleCount'].value+1d)/10)))
return 1d / (1d + Math.exp(-Math.log(val) / 5));
}
}