KNN算法是分类算法中最简单的一种,
原理:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别。
实现方法:从训练集中找到和新数据距离最近的k条记录,然后预测新数据的类别。
实验题目:
已知246篇训练文本对应的公众在anger (愤怒)、disgust (厌恶)、fear (害怕)、joy (高兴)、sad (悲伤)、surprise (惊讶)这六种情感上的概率值,预测1000篇测试文本对应的公众在上述六种情感上的概率值各是多少?
一.计算距离的方法
(1)欧式距离
(2)cos相似度度量
(3)切比雪夫距离
(4)曼哈顿距离
二.预测方法
(1)多数判决法,在k个中选最多的那个情感值
(2)加权计算
三.K的大小
取训练文本个数n的开根号
四.Max-Min 归一化
对原始数据做个线性变换,使结果值映射到[0 - 1]之间:
(这个归一化方法提高了0.2的准确率哦)
先初始化MAX和MIN数组,然后对每个属性,历遍所有文本,求出相应的MAX和MIN值,使用公式进行归一化。
void normalization() //归一化
{
//初始化
double MAX, MIN;
for(int i = 0; i < atr; i++){
MAX = 0;
MIN = inf;
//求出Max-Min
for(int j=0;j<line;j++){
if(text[j][i] > MAX)
MAX = text[j][i];
if(text[j][i] < MIN)
MIN = text[j][i];
}
//归一化
for(int j = 0; j < line; j++){
if((MAX - MIN)!= 0)
text[j][i] = (text[j][i]-MIN) / (MAX-MIN);
else
text[j][i] = 0;
}
}
}
五. 去掉无情感词
bool delet(string s){
if(s=="for"||s=="at"||s=="on"||s=="in"||
s=="a"||s=="to"||s=="is"||s=="the") //自定义
return true;
else return false;
}