我想获得由 java 中的两个数组表示的 xy 对的加权线性回归的系数。我已经对 weka 进行了归零,但它在“LinearRegression”类中询问“Instances”类对象。要创建“Instances”类文件,需要一个包含数据的 ARFF 文件。我遇到了使用 FastVector 类的解决方案,但现在在最新的 weka 版本中已弃用。如何为 xy 对和相应的权重创建一个 ARFF 文件,这些权重都由 java 中的数组表示?
这是我基于 Baz 回答的代码。它在最后一行 "lr.buildClassifier(newDataset)" - Thread [main] (Suspended (exception UnassignedClassException))
Capabilities.testWithFail(Instances) line: 1302 上给出了一个异常。这是代码 -
public static void test() throws Exception
{
double[][] data = {{4058.0, 4059.0, 4060.0, 214.0, 1710.0, 2452.0, 2473.0, 2474.0, 2475.0, 2476.0, 2477.0, 2478.0, 2688.0, 2905.0, 2906.0, 2907.0, 2908.0, 2909.0, 2950.0, 2969.0, 2970.0, 3202.0, 3342.0, 3900.0, 4007.0, 4052.0, 4058.0, 4059.0, 4060.0}, {19.0, 20.0, 21.0, 31.0, 103.0, 136.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 212.0, 243.0, 244.0, 245.0, 246.0, 247.0, 261.0, 270.0, 271.0, 294.0, 302.0, 340.0, 343.0, 354.0, 356.0, 357.0, 358.0}};
int numInstances = data[0].length;
ArrayList<Attribute> atts = new ArrayList<Attribute>();
List<Instance> instances = new ArrayList<Instance>();
for(int dim = 0; dim < 2; dim++)
{
Attribute current = new Attribute("Attribute" + dim, dim);
if(dim == 0)
{
for(int obj = 0; obj < numInstances; obj++)
{
instances.add(new SparseInstance(numInstances));
}
}
for(int obj = 0; obj < numInstances; obj++)
{
instances.get(obj).setValue(current, data[dim][obj]);
//instances.get(obj).setWeight(weights[obj]);
}
atts.add(current);
}
Instances newDataset = new Instances("Dataset", atts, instances.size());
for(Instance inst : instances)
newDataset.add(inst);
LinearRegression lr = new LinearRegression();
lr.buildClassifier(newDataset);
}