📄 myclassifier.java
字号:
package util;
import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.core.Instance;
import weka.core.Instances;
public class MyClassifier
{
private Classifier my_classifier; //分类器
//构造函数. 初始化选择分类算法
public MyClassifier(Instances data, Classifier specific_classifier)
throws Exception
{
my_classifier=specific_classifier;
my_classifier.buildClassifier(data);
}
//返回一个分类器对象
public Classifier getClassifier()
{
return my_classifier;
}
public MyClassifier getC() throws Exception
{
return (MyClassifier) this.clone();
}
// 用测试集test对分类器进行测试,返回其分类的正确率
public double getAccuracy(Instances test) throws Exception
{
Evaluation eTest = new Evaluation(test);
eTest.evaluateModel(my_classifier, test);
double correct = eTest.correct(); //正确分类的个数
double acc = 100 * correct / test.numInstances(); // 正确率
return acc;
}
//取得对一个样本in进行分类的置信度,即概率较大的那一类别的概率
public double getConfidence(Instance in) throws Exception
{
double[] fDistribution = my_classifier.distributionForInstance(in);
int indexOfMax = getMax_ofindex(fDistribution); //概率较大者的下标
return fDistribution[indexOfMax];
}
//整一个样本集的置信度
public double getConfidence(Instances in) throws Exception
{
double t = 0.0;
for (int i = 0; i < in.numInstances(); i++)
{
double[] fDistribution = my_classifier.distributionForInstance(in
.instance(i));
int indexOfMax = getMax_ofindex(fDistribution); //概率较大者的下标
t += fDistribution[indexOfMax];
}
return t / in.numInstances();
}
public double getConfidencePart(Instances in,double p)throws Exception
{
double t=0.0;
int n=in.numInstances();
double[] conf=new double[n];
for(int i=0;i<n;i++)
{
double[] fDistribution=my_classifier.distributionForInstance(in.instance(i));
int indexOfMax=getMax_ofindex(fDistribution);
conf[i]=fDistribution[indexOfMax];
}
conf=MySort.increSort(conf);
int index=(int)p*n;
for(int i=0;i<index;i++)
{
t+=conf[i];
}
return t/index;
}
//返回in被分类的类别标签(类别编号)
public double classifyInstance(Instance in) throws Exception
{
return my_classifier.classifyInstance(in);
}
//找最大者的下标
private int getMax_ofindex(double[] d)
{
int max = 0;
for (int i = 0; i < d.length; i++)
if (d[max] < d[i])
max = i;
return max;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -