/** 最小最大规范化也叫离差标准化 * 可以对原始数据进行线性变换, * 假定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)); } }