机器学习-KNN算法实验


使用 sklearn包,测试数据iris

KNN算法要点

距离度量

机器学习常见距离度量

取最邻近点

获取最邻近点算法有 KD-tree和 Ball-tree

K值选择

k值太小,模型复杂,容易过拟合
k值过大,模型简单,容易欠拟合
一般取较小的奇数

加载数据

# sklearn可以自动加载iris数据集
# 较小的数据集使用load_*
# 较大的数据集使用fetch_*,使用时如果默认路径没有会从网络自动下载
# iris 数据集是整体,没有划分训练集和测试集,需要我们进行划分
from sklearn.datasets import load_iris
iris = load_iris()

切分数据

# 使用train_test_split对数据进行划分
# test_size 测试数据占比
# random_state 采样种子,不同种子会有不同的采样结果,不指定,前后两次采样可能存在不一致
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2,random_state=1)

特征预处理

# 数据处理有两种方式,归一化or 标准化
# 下面采用归一化,将数据统一处理成(0,1)之间的数
# fit_transform,第一步先匹配,第二步转换数据
# transform 是直接转换数据
from sklearn.preprocessing import MinMaxScaler
data_transform = MinMaxScaler(feature_range=(0, 1))
x_train = data_transform.fit_transform(x_train)
x_test = data_transform.transform(x_test)

训练模型

from sklearn.neighbors import KNeighborsClassifier
# 创建模型
# algorithm 获取最邻近点算法
#   brute 暴力穷举
#   kd_tree 维度较低时使用
#   ball_tree 维度大于20时使用
# metric 距离计算方式,默认闵氏距离,p=2
estimator = KNeighborsClassifier(n_neighbors=3)
# 训练模型
estimator.fit(x_train, y_train)

查看结果

# socre既测试结果的准确率
score = estimator.score(x_test, y_test)

总结

  • 优点:
    • 原理简单,容易理解。
    • 基本上没有学习。
    • 对于类域交叉的样本集效果较好。
  • 缺点:
    • 惰性学习;
    • 对k值敏感,模型结果容易受到k值的不同取值的影响;
    • 在不均衡样本的场景下效果不好。
    • 涉及到距离计算,计算量随着样本数的增加而增加,只适用于中小型数据集场景。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值