基于KNN模型的分类算法研究 (2)

本段代码没有实际意义,只是帮助读者理解特征向量和分类标签。可以这么理解,A代表非常热,B代表一般热,属性1代表吃冰淇淋数量,属性2代表喝水的数量。那么样本数据可以解读为:

游客 冰淇淋 喝水 冷热程度 判断描述 小王 8 4 A 小王吃了8个冰淇淋喝了4瓶水,成都天气非常热 小张 7 1 A 小张吃了7个冰淇淋喝了1瓶水,成都天气非常热 小李 1 4 B 小王吃了1个冰淇淋喝了4瓶水,成都天气一般热 小赵 3 0 B 小王吃了3个冰淇淋喝了0瓶水,成都天气一般热

思考:

计算机是不能直接处理自然语言,往往需要将自然语言转化成特征向量,再通过计算机处理。比如这里不是吃喝看天气情况了,而是垃圾邮件自动识别,我们就需要对邮件转化成数值型特征向量再输入计算机进行处理。

规范文件数据集处理

如下是一个规范文件的数据集(已经经过数采集、数据格式化、数据预处理等),特征向量包括3个,样本属于一个多分类的情况。即我们通过周飞行里程数、玩游戏占比、吃冰激凌数量判断一个人的优秀程度。假设1代表普通,2代表比较优秀,3代表非常优秀。(ps:一个人一周都在飞机上度过忙碌的工作,又不太玩游戏,关键还注意饮食,说明优秀是有道理的。)

周飞行里程数(km) 周玩游戏占比(%) 周消耗冰激凌(公升) 样本分类 40920 8.326976 0.953952 3 14488 7.153469 1.673904 2 26052 1.441871 0.805124 1 ... ... ... ... 75136 13.147394 0.428964 1 38344 1.669788 0.134296 1 72993 10.141740 1.032955 1

上面是处理好保存在txt文本的数据,计算机如何去识别并处理这些数据呢?这里我们分别提取特征向量和标签向量。数据集处理代码如下:

'''对文件进行格式处理,便于分类器可以理解''' def file_matrix(filename): f = open(filename) arrayLines = f.readlines() returnMat = zeros((len(arrayLines),3)) # 数据集 classLabelVactor = [] # 标签集 index = 0 for line in arrayLines: listFromLine = line.strip().split(' ') # 分析数据,空格处理 returnMat[index,:] = listFromLine[0:3] classLabelVactor.append(int(listFromLine[-1])) index +=1 return returnMat,classLabelVactor

代码说明:

1 zeros(Y,X):填充矩阵,需要导入NumPy包。Y向量代表样本行数,X向量代表样本特征数即列数。 2 returnMat[index,:]:遍历样本特征向量

运行查看数据集的特征向量和分类标签:

''' KNN针对文件的分类算法''' filename = os.path.abspath(r'./datasource/datingTestSet2.txt') dataset,labels = file_matrix(filename) print('特征集:\n'+str(dataset)) print('标签集:\n'+str(labels))

运行结果:

特征集: [[4.0920000e+04 8.3269760e+00 9.5395200e-01] [1.4488000e+04 7.1534690e+00 1.6739040e+00] [2.6052000e+04 1.4418710e+00 8.0512400e-01] ... [2.6575000e+04 1.0650102e+01 8.6662700e-01] [4.8111000e+04 9.1345280e+00 7.2804500e-01] [4.3757000e+04 7.8826010e+00 1.3324460e+00]] 标签集: [3, 2, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3, 2, 1, 2, 3, 2, 3, 2, 3, 2, 1, 3, 1, 3, 1, 2, 1, 1, 2, 3, 3, 1, 2, 3, 3, 3, ... 3, 3, 1, 2, 3, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1]

不规范数据集处理

这里我们只是提供一个思路。比如做文本分类算法,如何将一篇篇新闻转化为规范的数值型数据集呢。假设Z政治新闻100篇,T体育新闻100篇,Y娱乐新闻100篇,K科技新闻100篇。我们进行分类:

1 遍历所有文本转化统一的txt格式文件(2.2节会讲到) 2 对全部ZTYK文本进行分词和停用词处理。 3 统计全部样本词频尺寸(可以采用TF-IDF或者深度学习方法处理)。 4 每个样本进行词频统计

最终模拟效果如下:

样本 词1 词2 词3 词4 ... 词n 标签 p1 200 0 100 50 ... 20 Z p2 100 0 80 40 ... 10 Z p3 0 100 5 5 ... 200 T p4 6 230 40 12 ... 670 T p5 0 2 110 57 ... 234 Y ... ... ... ... ... ... ... ... pn 123 45 0 580 ... 24 K 2.2 数据格式化

数据文件转化

自然语言处理、数据挖掘、机器学习技术应用愈加广泛。针对大数据的预处理工作是一项庞杂、棘手的工作。首先数据采集和存储,尤其高质量数据采集往往不是那么简单。采集后的信息文件格式不一,诸如pdf,doc,docx,Excel,ppt等多种形式。然而最常见便是txt、pdf和word类型的文档。这里所谓格式转化主要对pdf和word文档进行文本格式转换成txt。格式一致化以后再进行后续预处理工作。具体详情请参照之前写的数据分析:基于Python的自定义文件格式转换系统一文。

文件格式化处理

这里可以采用多种方式,诸如上文提到的矩阵填充法,当然也可以采用现成的工具。比如百度的Echarts中表格数据转换工具。其支持纯数组的转换,数组+对象,地理坐标等方式,还支持json数据的转化,这对使用百度EChart可视化是非常友好的,也有助于可视化数据分析。文本数据格式效果如下图:

基于KNN模型的分类算法研究

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydjwf.html