目录
一、对[1.0,1.1],[1.0,1.0],[0,0],[0,0.1],[0.1,0.1],[1.1,1.1]六个点用knn进行聚类,并显示。
1. 未调用KNN算法前,绿色为未知分类
2. 调用KNN算法
3. 运行结果
二、使用knn算法分类手写数字文件
1. 第一个temp的含义
2. 第二个temp的含义
3. 第三个temp的含义
4. 第四个temp的含义
5. argsort
三、使用knn算法分类约会数据,选择不同的k值,看看正确率有什么变化
1. 常用的特征归一化方法MinMaxScaler 实现公式如下
2. 将txt文件转换为特征矩阵存储起来
3. 用KNN算法计算正确率
四、K均值聚类算法分类80个二维数据
1. means聚类算法的工作流程
五、模拟第一题,对ppt中P3页的电影例子进行分类并显示分类结果。标签中不再显示坐标,而是显示电影名字。
1. 处理数据
2. 未分类之前
3. 用KNN算法分类之后
一、对[1.0,1.1],[1.0,1.0],[0,0],[0,0.1],[0.1,0.1],[1.1,1.1]六个点用knn进行聚类,并显示。
[[1.0,1.1],[1.0,1.0],[0,0],[0,0.1],[0.1,0.1],[1.1,1.1]]为样本集,标签集为:[0,0,1,1,2,2]。
前两个元素[1.0,1.1],[1.0,1.0]为一类,中间两个元素[0,0],[0,0.1]为另一类,[0.1,0.1],[1.1,1.1]为待分类的样本。
在”简单kNN.ipynb”最后一个单元格基础上,将绿色为分类样本通过调用knn算法实现分类并按类别显示.
1. 未调用KNN算法前,绿色为未知分类
2. 调用KNN算法
3. 运行结果
二、使用knn算法分类手写数字文件
knn算法中的几个temp分别表示什么意义,temp.shape是否有变化,分别对应着什么?
argsort是什么,记录的数据对应着什么?
1. 第一个temp的含义
矩阵相减的时候,由于_x是一个1*1024的矩阵,而x是一个1934*1024的矩阵,_x的维度会变成1934*1024,每行都是一样的,再减掉x矩阵。
其实就是求所求点与各点之间的坐标差,x0-x, y0-y,.....
Temp.shape = (1934 , 1024)
2. 第二个temp的含义
求平方,(x0-x)^2,(y0-y)^2,.......
Temp.shape = (1934 , 1024)
3. 第三个temp的含义
矩阵变为1934行1列,(x0-x)^2 +(y0-y)^2+.......
Temp.shape = (1934 , 1)
4. 第四个temp的含义
给矩阵每个数开根,算出所求点与已有各点的距离
Sqrt(x0-x)^2 +(y0-y)^2+.......)
Temp.shape = (1934 , 1)
5. argsort
将列表中的元素进行排序,返回列表索引号为0的值表示原列表中最小的数字的索引号,依此类推。例如temp列表为[0. 0.1 1.48660687 1.41421356],则temp.argsort()返回值为[0 1 3 2] 第一个元素值为0,表示temp中最小的元素所在索引号为0,第二个元素值为1,表示temp中第二小的元素所在索引号为1,第三小元素所在索引号为3,第四小元素所在索引号为2
三、使用knn算法分类约会数据,选择不同的k值,看看正确率有什么变化
1. 常用的特征归一化方法MinMaxScaler 实现公式如下
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
2. 将txt文件转换为特征矩阵存储起来
3. 用KNN算法计算正确率
测试1-200之间的k值的准确率:
结果如下:
可以发现不是线性关系,随着数字变大,准确率也会下降。
四、K均值聚类算法分类80个二维数据
1. means聚类算法的工作流程
(1)首先随机选择初心质心,其中K是用户指定的参数(需要分成几类)
(2)将数据集中的每个点指派到最近的质心,而指派到一个质心的点就为一个簇。
(3)根据指派到簇的点,将每个簇的质心更新为该簇所有点的平均值
(4)重复指派和更新步骤,直到簇不发生变化,或者等价的,直到质心不发生变化。