机器学习之K-近邻算法(KNN)
K Nearest Neighbor算法这个算法是机器学习里面比较经典的算法,也叫做KNN算法,总体来说KNN算法是相对比较容易理解的算法算法定义:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别距离公式(一般要处理数据如标准化后再计算距离)欧式距离曼哈顿距离明可夫斯基距离KNN算法中K取值的分析K取的过小,容易受到异常点的影响;K取
·
K Nearest Neighbor算法
这个算法是机器学习里面比较经典的算法,也叫做KNN算法,总体来说KNN算法是相对比较容易理解的算法
-
算法定义:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别
-
KNN算法中K取值的分析
- K取的过小,容易受到异常点的影响;
- K取的过大,容易受到样本不均衡的影响;
-
KNN算法的API
sklearn .neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
1. n_neighbors:int(默认为5),k_neighbors:查询默认使用邻居使用的邻居数
2. algorithm:{'auto','ball_tree','kd_tree','brute'},可选用于计算最近邻居的算法:'ball_tree'将会使用BallTree,'kd_tree'将使用KDTree。'auto'将尝试根据传递的方式给fit方法的值来决定适合的算法,不同实现方式影响效率
- 案列1:莺尾花种类预测
- 数据介绍:Iris数据集是常用的分类实验数据集,有Fisher,1936收集整理。Iris也称莺尾花卉数据集,是一类多重变量分析的数据。具体介绍点击该处。
- 步骤分析
获取数据—>数据集的划分---->特征工程(标准化)---->KNN预估器流程---->模型评估 - 代码实例
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
def knn_iris():
"""
用KNN算法对莺尾花进行分类
:return:
"""
# 1)获取数据
iris = load_iris()
# 2)数据划分
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6)
# 3)特征工程(标准化)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test) # 上一步的fit已经计算出来了mean和std,在对x_test进行归一化的时候必须使用和x_train相同的mean和std,故这里只能transform
# 4)KNN预估器流程
estimator = KNeighborsClassifier(n_neighbors=3) # 这里就是K值,可以修改查看精度的变化
estimator.fit(x_train,y_train)
# 5)模型评估
"""评估方法1:直接比对真实值和预测值"""
y_predict = estimator.predict(x_test)
print("y_predict:\n",y_predict)
print("直接比对真实值和预测值:\n",y_test == y_predict)
"""评估方法2:计算准确率"""
score = estimator.score(x_test,y_test)
print("准确率:\n",score)
return
if __name__ == '__main__':
knn_iris()
- KNN算法的优缺点
- 优点
简单,易于理解,易于实现,无需训练 - 缺点
懒惰算法,对测试样本分类时计算量大,内存开销大
必须指定K值,K值选择不当则分类的精度也不能保证 - 使用场景
小数据场景,几千~几万样本,具体场景具体业务去测试
项目实战
更多推荐
已为社区贡献3条内容
所有评论(0)