📄 linear.java
字号:
package learner;
import java.util.Arrays;
public class Linear implements Classifier {
public Data data;
public double threshold;
public double error;
public int sign;
Linear(Data data, boolean isdatasorted) {
if (!isdatasorted)
Arrays.sort(data.training);
this.data = data;
linear();
}
private void linear() {
int i, j, sign;
double threshold = 0, error;
this.error = 1;
for (i = 0; i < data.training.length; i++) {
sign = 1;
if (i == 0)
threshold = data.training[i].data - 400;
else
threshold = ((data.training[i - 1].data + data.training[i].data) / 2) - 0.001;
error = 0;
for (j = 0; j < data.training.length; j++) {
if (data.training[j].data < threshold
&& data.training[j].label != -1.0) {
error += data.training[j].weight;
}
if (data.training[j].data > threshold
&& data.training[j].label != +1.0)
error += data.training[j].weight;
}
if (1 - error < error) {
error = 1 - error;
sign = -1;
}
if (error < this.error) {
this.threshold = threshold;
this.sign = sign;
this.error = error;
}
}
}
public int classify(double data) {
if ((data > this.threshold && this.sign == +1)
|| (data < this.threshold && this.sign == -1))
return 1;
else
return -1;
}
public double test(Datastructure[] testdata) {
int good = 0;
for (int i = 0; i < testdata.length; i++)
if (classify(testdata[i].data) == testdata[i].label)
good++;
return (good * 100.0) / testdata.length;
}
public double[] crossvalidate(int folds) {
double average = 0;
double[] results = new double[folds];
for (int i = 0; i < folds; i++) {
data.split(i, folds);
results[i] = test(data.test);
}
average = average / folds;
return results;
}
public double findparameter() {
return 0.0;
}
public Data getdata() {
return this.data;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -