NLP情感分析——KNN算法

一、 基本概念


文本情感分析是对文本中的某段已知文字的两极性进行分类,判断出此文字中表述的观点是积极的、消极的、还是中性的情绪。

目前的研究方法主要有两类:一种是基于情感词典的方法,另一种是基于机器学习的方法。前者需要用到标注好的情感词典(英文/中文),通过情感词的褒贬性判断文本的情感倾向。后者是将传统的文本分类方法如朴素贝叶斯(NB)、k近邻(kNN)、最大熵、支持向量机(SVM)等算法应用于情感分类。需要大量的人工标注的语料作为训练集,通过提取文本特征,构建分类器来实现情感的分类。

 

二、KNN算法

在各种分类算法中,我选择了K-Nearest Neighbor(KNN) 最邻近分类算法进行简单的学习了解。KNN分类算法的思路是:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别。核心思想俗称“随大流”,基于实例的学习(instance-based learning)和懒惰学习(lazy learning)。懒惰学习:指的是在训练是仅仅是保存样本集的信息,直到测试样本到达是才进行分类决策。

KNN算法的优缺点如下:

优点:(1)简单、易实现、易理解、无需参数估计及训练;

(2)适用于对稀有时间进行分类;

(3)特别适用于多分类问题(multi-modal,分类对象具有多个类别标签),比SVM表现要好。

缺点:(分类)

(1)当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本 占多数。 改进方法:采用权值,与该样本距离小的邻居权值大;

(2)计算量较大,对每一个待分类的样本都要计算它与全体已知样本的距离进行排序继而求得K个最近邻点。目前常用的改进方法,事先对已知样本点进行剪辑,去除对分类作用不大的样本。该改进算法比较适用于容量大的类域,而容量较小的类域容易产生误分。

 

三、算法实例

一个简单的KNN算法的例子(Python)如下:

1.        import numpy as np    

2.        from sklearn import neighbors     #需要加载numpy,sklearn包,这两个都是机器学习或数据挖掘常用的包。       

5.        knn = neighbors.KNeighborsClassifier() #得knn分类器    

6.        data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])  #data对应着打斗次数和接吻次数  

7.        labels = np.array([1,1,1,2,2,2]) #labels则是对应Romance和Action  

8.        knn.fit(data,labels) #导入数据进行训练   

9.        print(knn.predict([[18,90]])) #传入参数为多维数组


假设电影数据如下:

电影名称

打斗次数

接吻次数

电影类型

A

3

104

Romance

B

2

100

Romance

C

1

81

Romance

D

101

10

Action

E

99

5

Action

F

98

2

Action

未知

18

90

待求

注:标红色的未知电影是需要进行预测属于浪漫片还是动作片。

 

将数据中的“打斗次数”属性标记为X,“接吻次数”标记为Y,这样上述数据都能化为坐标轴中的一点;再将所有点与“未知”的点G进行距离计算,因为这个例子是二维的,因此这里使用

如果是多维的话,可以使用:

。以此类推进行计算,近似为整数,最后得到结果:

a:20

b:18

c:19

d:115

e:117

f:118

因此可以看出,最近的三个点是ABC三点,而ABC三点都是Romance类型。

 

引申:如果ABC中三个电影分类有一个不是Romance怎么办。遵循少数服从多数的投票法则(majority-voting),让未知实例归类为最邻近样本中最多数的类别。

你可能感兴趣的:(NLP情感分析——KNN算法)