1. 概述及k近邻算法

  • 数据集:数据集?样本?特征值?标签?
  • 分类任务:
    • 二分类
    • 多分类:数字识别,图像识别
  • 回归任务:连续的值,而非一个类别

  • 监督学习:
    • 有了答案,有标签
  • 非监督学习
    • 对没有标记的数据进行分类-聚类分析
    • 意义:数据降维(方便可视化,异常检测): 特征提取:提取有意义的特征、特征压缩:PCA
  • 半监督学习:
    • 一部分数据有标记、答案,一部分没有
    • 通常先使用无监督分出标签,然后使用监督学习
  • 增强学习
    • 无人驾驶
    • 机器人
  • 批量学习
    • 优点:简单;问题:如何适应环境变化,解决:定时重写批量学习,缺点:每次重新批量运算量巨大,实时性强的无法应用
  • 在线学习
    • 优点:机试反映新的环境变化, 缺点:新的数据有问题; 解决:加强数据监控
    • 也适用于数据量巨大
  • 参数学习
    • 一旦学到了参数,就不需要原有的数据集
  • 非参数学习
    • 不对模型进行过多的假设
    • 非参数不等于没有参数

对具体的问题,需要尝试多种算法比较出较好的算法

k近邻算法

  • 距离:
    • 欧拉距离:
    • 曼哈顿距离
  • 超参数和模型参数
    • 超参数:在算法运行前需要决定的参数
    • 模型参数:算法过程中学习的参数
    • KNN没有模型参数,k是典型的超参数
    • 寻找好的超参数:
      • 领域知识,经验数值(默认数值),实验搜索
  • 数据归一化
    • 最值归一化normalization:所有数据映射在0-1之间,分布有明显的边界比如成绩边界在0-100,但是如果没有边界的数据有较大影响
    • 均值方差归一化standardization:数据分布没有明显边界,可能存在极端值,
  • 如何数据归一化
    • 测试集和训练集使用的均值和方差 都是训练集的
  • 缺点:
    • 处理量大
    • 高度数据相关
    • 预测结果不具有课解释性
    • 维数灾难:随着维度的增加,‘看似相近’的两个点之间的距离越来越大
  • 流程
    • 训练数据/测试数据 -> 归一化 -> 模型(网格搜索寻最优超参数) -> 训练 -> 精确度
  • 代码:
from sklearn import datasets  # 导入数据集
from sklearn.model_selection import train_test_split   # 测试集和训练集的划分
from sklearn.preprocessing import StandardScaler   # 传入均值方差方法
from sklearn.model_selection import GridSearchCV  # 超网格搜索
from sklearn.neighbors import KNeighborsClassifier   # k近邻算法
from sklearn.metrics import accuracy_score  # 估计方法

# 数据加载分割预处理
iris = datasets.load_iris()
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)

# 数据归一化处理
standardScaler = StandardScaler()   # 实例化
standardScaler.fit(x_train)   # 根据训练集算出均值和方差
standardScaler.mean_   # 每一列的均值
standardScaler.scale_   # 每一列的方差
x_train = standardScaler.transform(x_train)  # 转换训练集归一化处理
x_test = standardScaler.transform(x_test)   # 转化测试机归一化处理

# 超网格搜索最佳参数
param_grid = [
    {
        'weights':['uniform'],  # 距离统一不加权
        'n_neighbors': [i for i in range(1, 11)]  # 邻居数量n
    },
    {
        'weights':['distance'],  # 距离加权
        'n_neighbors': [i for i in range(1, 11)],  # 
        'p':[i for i in range(1, 6)] # 明科夫斯基公式的p次方
    }
]  # 定义参数字典型列表
grid_search = GridSearchCV(knn_clf, param_grid,  n_jobs=-1, verbose=2)  # 实例化超网格搜索,传入模型、参数、CPU调动核数、详情显示
grid_search.fit(x_train, y_train) # 进行训练
grid_search.best_estimator_  # 最佳的参数
grid_search.best_score_  # 根据交叉验证得出的最佳预测结果



knn_clf = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=2)
knn_clf.fit(x_train, y_train)
knn_clf.score(x_test, y_test)

y_predict = knn_clf.predict(x_test)
accuracy_score(y_test,y_predict)




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值