目录
KNN基本思想(K-Nearest Neighbor)
KNN是分类算法
原理:投票
步骤: 1. 算距离:给定目标,计算它与训练集中的每个样本的距离
2. 找邻居:找到距离最近的k个样本,作为给定目标的近邻
3. 做分类:根据这k个近邻归属的主要类别,来对给定目标分类
距离定义:
距离函数d(x,y)应满足的准则:
距离计算:
连续性数据
连续型数据距离: 设 和 为坐标系中的两个点
闵可夫斯基距离(Minkowski Distance)
时为欧几里得距离(Euclidean Distance)
时为曼哈顿距离(Manhattan Distance)
时为切比雪夫距离(Chebyshev Distance)
余弦相似度(Cosine Similarity)
注:余弦相似度只与向量方向有关,与向量长短无关。;受向量平移影响
皮尔逊相关系数(Pearson Correlation)
注:皮尔逊相关系数具有平移不变性和尺度不变性
离散型数据距离
汉明距离(Hamming Disstance)— 编辑距离
将字符串s1变为s2所需要的做的最小替换次数
例:1011101与1001001的汉明距离为 2
toned与roses的汉明距离为3
杰卡德相似度(Jaccard Similarity):用于比较有限样本集之间的相似性和差异性
其中,A和B为两个有限集合
汉明距离(Hamming Disstance)— 编辑距离
将字符串s1变为s2所需要的做的最小替换次数
例:1011101与1001001的汉明距离为 2
toned与roses的汉明距离为3
杰卡德相似度(Jaccard Similarity):用于比较有限样本集之间的相似性和差异性
其中: 为用户A没看过而用户B看过的电影
为用户A看过而用户B没看过的电影
为用户A看过且用户B看过的电影
对iris进行KNN聚类:
import numpy as np
from sklearn import datasets
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
iris = datasets.load_iris()
train_data, test_data, train_label, test_label = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0) #训练集占百分之八十,测试集占百分之二十
mlp = MLPClassifier(hidden_layer_sizes=(20,3),random_state=1)
mlp.fit(train_data,train_label)
pre = mlp.predict(test_data)
print("Training set score: %f" % mlp.score(train_data, train_label))
print("Test set score: %f" % mlp.score(test_data, test_label))
print("真实:")
print(test_label)
print("预测:")
print(pre)
结果如下: