学习目标

  • 掌握K-近邻算法实现过程
  • 知道K-近邻算法的距离公式
  • 知道K-近邻算法的超参数K值以及取值问题
  • 知道kd树实现搜索的过程
  • 应用KNeighborsClassifier实现分类
  • 知道K-近邻算法的优缺点
  • 知道交叉验证实现过程
  • 知道超参数搜索过程
  • 应用GridSearchCV实现算法参数的调优

    纪要

    1.1 K-近邻算法简介

    1.定义:

    1. 就是通过你的"邻居"来判断你属于哪个类别

    2.如何计算你到你的”邻居”的距离

    1. 一般时候,都是使用欧氏距离

    1.2 k近邻算法api初步使用

    1.sklearn

    1. 优势:<br /> 1.文档多,且规范,<br /> 2.包含的算法多<br /> 3.实现起来容易

    2.sklearn中包含内容

    1. 分类、聚类、回归<br /> 特征工程<br /> 模型选择、调优

    3.knn中的api

    1. sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)<br /> 参数:<br /> n_neighbors -- 选定参考几个邻居

    4.机器学习中实现的过程

    1. 1.实例化一个估计器<br /> 2.使用fit方法进行训练

    1.3 距离度量[###]

    1.欧式距离

    1. 通过距离平方值进行计算

    2.曼哈顿距离(Manhattan Distance):

    1. 通过举例的绝对值进行计算

    3.切比雪夫距离 (Chebyshev Distance):

    1. 维度的最大值进行计算

    4.闵可夫斯基距离(Minkowski Distance):

    1. p=1时,就是曼哈顿距离;<br /> p=2时,就是欧氏距离;<br /> p→∞时,就是切比雪夫距离。<br /> 小结:前面四个距离公式都是把单位相同看待了,所以计算过程不是很科学

    5.标准化欧氏距离 (Standardized EuclideanDistance):

    1. 在计算过程中添加了标准差,对量刚数据进行处理

    6.余弦距离(Cosine Distance)

    1. 通过cos思想完成

    7.汉明距离(Hamming Distance)【了解】:

    1. 一个字符串到另一个字符串需要变换几个字母,进行统计

    8.杰卡德距离(Jaccard Distance)【了解】:

    1. 通过交并集进行统计

    9.马氏距离(Mahalanobis Distance)【了解】

    1. 通过样本分布进行计算

    1.4 k值选择[*]

    K值过小:

    1. 容易受到异常点的影响<br /> 过拟合

    k值过大:

    1. 受到样本均衡的问题<br /> 欠拟合

    拓展:

    近似误差 — 过拟合 —在训练集上表现好,测试集表现不好
    估计误差好才是真的好!

    1.5 kd树[###]

    1.构建树

    2.最近领域搜索

    案例:

    一,构建树
    第一次:
    x轴— 2,5,9,4,8,7 —> 2,4,5,7,8,9
    y轴— 3,4,6,7,1,2 —> 1,2,3,4,6,7

    1. 首先选择x轴, 找中间点,发现是(7,2)
    2. 第二次:<br /> 左面: (2,3), [4,7], [5,4] --> 3,4,7<br /> 右面: (8,1), (9,6) --> 1,6
    3. y轴开始选择, 左边选择点是(5,4),右边选择点(9,6)
    4. 第三次:<br /> x轴开始选择

    二,搜索
    1.在本域内,没有进行跨域搜索
    2.要跨到其他域搜索

    1.6 案例:鸢尾花种类预测—数据集介绍[**]

    1.获取数据集

    1. sklearn.datasets.<br /> 小数据:<br /> sklearn.datasets.load_*<br /> 注意:<br /> 该数据从本地获取<br /> 大数据集:<br /> sklearn.datasets.fetch_*<br /> 注意:<br /> 该数据从网上下载<br /> subset--表示获取到的数据集类型

    2.数据集返回值介绍

    1. 返回值类型是bunch--是一个字典类型<br /> 返回值的属性:<br /> data:特征数据数组<br /> target:标签(目标)数组<br /> DESCR:数据描述<br /> feature_names:特征名,<br /> target_names:标签(目标值)名

    3.数据可视化

    1. import seaborn<br /> seaborn.lmplot()<br /> 参数<br /> x,y -- 具体x轴,y轴数据的索引值<br /> data -- 具体数据<br /> hue -- 目标值是什么<br /> fit_reg -- 是否进行线性拟合

    4.数据集的划分

    1. api:<br /> sklearn.model_selection.train_test_split(arrays, *options)<br /> 参数:<br /> x -- 特征值<br /> y -- 目标值<br /> test_size -- 测试集大小<br /> ramdom_state -- 随机数种子<br /> 返回值:<br /> x_train, x_test, y_train, y_test

    1.7 特征工程-特征预处理[**]

    1.定义

    1. 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

    2.包含内容:

    1. 归一化<br /> 标准化

    3.api

    1. sklearn.preprocessing

    4.归一化

    1. 定义:<br /> 对原始数据进行变换把数据映射到(默认为[0,1])之间<br /> api:<br /> sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )<br /> 参数:<br /> feature_range -- 自己指定范围,默认0-1<br /> 总结:<br /> 鲁棒性比较差(容易受到异常点的影响)<br /> 只适合传统精确小数据场景(以后不会用你了)

    5.标准化

    1. 定义:<br /> 对原始数据进行变换把数据变换到均值为0,标准差为1范围内<br /> api:<br /> sklearn.preprocessing.StandardScaler( )<br /> 总结:<br /> 异常值对我影响小<br /> 适合现代嘈杂大数据场景(以后就是用你了)

    1.8 案例:鸢尾花种类预测—流程实现[*]

    1.api

    sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=’auto’)
    algorithm — 选择什么样的算法进行计算
    auto,ball_tree, kd_tree, brute

    2.案例流程

    1. 1.获取数据集<br /> 2.数据基本处理<br /> 3.特征工程<br /> 4.机器学习(模型训练)<br /> 5.模型评估

    1.9 k近邻算法总结[**]

    优点:

    1. 1.简单有效<br /> 2.重新训练代价底<br /> 3.适合类域交叉样本<br /> 4.适合大样本自动分类

    缺点:

    1. 1.惰性学习<br /> 2.类别评分不是规格化<br /> 3.输出可解释性不强<br /> 4.对不均衡的样本不擅长<br /> 样本不均衡:收集到的数据每个类别占比严重失衡<br /> 5.计算量较大

    1.10 交叉验证和网格搜索[**]

    1.交叉验证

    1. 1.定义:<br /> 将拿到的训练数据,分为训练和验证集<br /> *折交叉验证<br /> 2.分割方式:<br /> 训练集:训练集+验证集<br /> 测试集:测试集<br /> 3.为什么需要交叉验证<br /> 为了让被评估的模型更加准确可信<br /> 注意:交叉验证不能提高模型的准确率

    2.网格搜索

    1. 超参数:<br /> sklearn中,需要手动指定的参数,叫做超参数<br /> 网格搜索就是把这些超参数的值,通过字典的形式传递进去,然后进行选择最优值

    3.api:

    1. sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)<br /> estimator -- 选择了哪个训练模型<br /> param_grid -- 需要传递的超参数<br /> cv -- 几折交叉验证

    1.11 案例2:预测facebook签到位置[*]

    1、获取数据集
    # 2.基本数据处理
    # 2.1 缩小数据范围
    # 2.2 选择时间特征
    # 2.3 去掉签到较少的地方
    # 2.4 确定特征值和目标值
    # 2.5 分割数据集
    # 3.特征工程—特征预处理(标准化)
    # 4.机器学习—knn+cv
    # 5.模型评估