Java中数据集的规范化
我正在做一个聚类程序,有一个double数据集,我需要对其进行规范化,以确保每个double(变量)具有相同的影响 我希望使用最小-最大规范化,其中每个变量的最小值和最大值都是确定的,但我不确定如何在Java数据集上实现这一点。有人有什么建议吗?给出了一个范围标准化 构造函数获取输入和规范化数据的高值和低值Java中数据集的规范化,java,double,cluster-computing,normalization,Java,Double,Cluster Computing,Normalization,我正在做一个聚类程序,有一个double数据集,我需要对其进行规范化,以确保每个double(变量)具有相同的影响 我希望使用最小-最大规范化,其中每个变量的最小值和最大值都是确定的,但我不确定如何在Java数据集上实现这一点。有人有什么建议吗?给出了一个范围标准化 构造函数获取输入和规范化数据的高值和低值 /** * Construct the normalization utility, allow the normalization range to be specified.
/**
* Construct the normalization utility, allow the normalization range to be specified.
* @param dataHigh The high value for the input data.
* @param dataLow The low value for the input data.
* @param dataHigh The high value for the normalized data.
* @param dataLow The low value for the normalized data.
*/
public NormUtil(double dataHigh, double dataLow, double normalizedHigh, double normalizedLow) {
this.dataHigh = dataHigh;
this.dataLow = dataLow;
this.normalizedHigh = normalizedHigh;
this.normalizedLow = normalizedLow;
然后可以对样本使用规格化方法
/**
* Normalize x.
* @param x The value to be normalized.
* @return The result of the normalization.
*/
public double normalize(double x) {
return ((x - dataLow)
/ (dataHigh - dataLow))
* (normalizedHigh - normalizedLow) + normalizedLow;
}
要查找数据集的最小值和最大值,请使用以下问题的一个答案:。您可以很好地使用apache.commons.math3库中的statutils.normalize方法
请参阅以下文档
Gradle依赖关系如下
implementation 'org.apache.commons:commons-math3:3.6.1'
Maven依赖
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
org.apache.commons
commons-math3
3.6.1
范例
public static void main(String[] args) {
double[] arr = new double[]{900.68, 900.63, 900.74, 900.59, 900.49, 900.65, 900.81, 900.82, 901.03, 900.74, 900.66, 900.49, 900.52, 900.63, 900.45};
double normArr[] = StatUtils.normalize(arr);
for (int i = 0; i < normArr.length; i++) {
System.out.print(normArr[i] + ", ");
}
}
publicstaticvoidmain(字符串[]args){
double[]arr=新的double[]{900.68900.63900.74900.59900.49900.65900.81900.82901.03900.74900.66900.49900.52900.63900.45};
双重标准化[]=身高标准化(arr);
对于(int i=0;i
这将打印出以下值:0.117878856446848383、-0.20956189238965656、0.5108071126989968、-0.47151425787616885、-1.1263951715931941、-0.07857096464004、0.9692237523003934、1.034711843672766、2.4099617624777、0.5108071126989968、-0.013097618274772323、-1.1263951715931941、-0.92308978783856、,-1.3883475370797065您可以在此处添加任何示例代码吗?就目前而言,你的问题太模糊了,无法回答。谢谢你@OrtomalaLokni,它帮助了我out@OrtomalaLokni-我知道已经有一段时间没有回答了,但我不明白如何获得normalizeHigh和normalizeLow并将其用于归一化?当然,只有在你正常化之后,你才会知道这些值?谢谢。您必须自己定义这些值,默认情况下您会选择0和1,但根据您的应用程序,您可以选择不同的值。