K-近邻算法

1.K-近邻算法

1.1K-近邻算法简介

    1.定义

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

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

        一般时,都是用欧氏距离

1.2K-近邻算法api

    1.sklearn

        优势:

        1.文档多,且规范

        2.包含算法多

        3.实现容易

    2.sklearn内容包含

        分类、聚类、回归

        特征工程

        模型选择、调优

    3.sklearn中api

        sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

        参数

            n_neighbors:int,可选(默认= 5),k_neighbors选择参考的邻居数

    4.机器学习实现过程

        1.实例化一个估计器

        2.使用fit方法进行训练

1.3距离度量

    1.欧氏距离

        通过距离平方值进行计算

    2.麦哈顿距离

        通过距离的绝对值进行计算

    3.切比雪夫距离

        维度的最大值进行计算

    4.闵可夫斯基距离

        当p=1时,就是曼哈顿距离;

        当p=2时,就是欧氏距离;

        当p→∞时,就是切比雪夫距离。

        根据p的不同,闵氏距离可以表示某一类/种的距离。

    小结:前面四个距离公式都把单位相同的看待,所以,计算过程不是很科学

    5.标准化欧氏距离

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

    6.余弦距离

        通过cos思想完成

    7.汉明距离

        一个字符串到另一个字符串需要变成字母,进行统计

    8.杰卡德距离

        通过交并集进行统计

    9.马氏距离

        通过样本分布计算

1.4k值选择

    1.k值过小 容易受到异常点影响  过拟合

    2.k值过大 容易受到样本均衡问题  欠拟合

    拓展:

    近似误差 ---过拟合

    ----在训练集上表现好,测试集表现不好

    估计误差好才是真的好

1.5kd树

    一.构建树

        第一次:

        第一次:

            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

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

    二.搜索

        1.在本域内,没有进行跨域搜索

        2.要跨到其他与搜索

1.6案例:鸢尾花种类预测–数据集介绍

    1.获取数据集

        sklearn.datasets.

    小数据集:

        sklearn.datasets.load_*

        注意:从本地下载

    大数据集:

        sklearn.datasets.fetch_*

        注意:网上下载

        subset --- 表示获取到的数据集类型

    2.数据集返回值介绍

        返回值是bunch 是一个字典类型

        返回值的属性:

        data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组

        target:标签数组,是 n_samples 的一维 numpy.ndarray 数组

        DESCR:数据描述

        feature_names:特征名,新闻数据,手写数字、回归数据集没有

        target_names:标签名

    3.数据可视化

        import seaborn

        seaborn.lmplot()

            参数

                x,y --- 具体 x轴 y轴数据

                data --- 真实数据

                hue ----目标值是什么

                fit --- reg  是否进行线性拟合

    4.数据集划分

        api:sklearn.model_selection.train_test_split(arrays, *options)

        参数:

            x---特征值

            y---目标值

            test-size---测试集大小

            random_state-----随机数种子

        返回值:

            x_train,x_test,y_train,y_test,

1.7特征工程–特征预处理

        1.定义 

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

        2.包含内容

            归一化

            标准化

        3.api

            sklearn.preprocessing

        4.归一化

            定义:

                通过对原始数据进行变换把数据映射到(默认为[0,1])之间

            api:

                sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )

            参数:

                feature_range ---自己指定范围,默认0-1	

            总结:

                鲁棒性差(容易受到异常值影响)

                只适合精确小数据场景(以后不会用他)

        5.标准化

            定义:

                通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

            api:

                sklearn.preprocessing.StandardScaler( )

            总结:

                异常值对他影响小

                适合现代嘈杂数据(以后经常使用)

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

    1.api

    sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

        algorithm: -- 选择什么样算法进行计算

        auto ball tree kd_tree brute

    2.案例实现流程

        1.获取数据集

        2.数据基本处理

        3.特征工程

        4.机器学习(模型训练)

        5.模型评估

1.9k近邻算法总结

优点:

    1.简洁有效

    2.重新训练代价底

    3.适合类域交叉样本

    4.适合大样本自动分类

缺点:

    1.惰性学习

    2.类别评分不是规格化

    3.输出可解释性不强

    4.对不均衡的样本不擅长

        样本不均衡:收集到的数据每个类别占比严重失衡

    5.计算量较大

1.10交叉验证与网格搜索

    1.交叉验证

        1.定义

            将拿到的测试数据,分为训练和验证集

            *折交叉验证

        2.分割方式

            训练集:训练集+验证集

            测试集:测试集

        3.为什么需要交叉验证

            为了让评估模型更加准确可信

            注意:交叉验证不能提高模型的准确率

    2.网格搜索

        超参数:

        sklearn中需要手动指定参数叫做超参数

        网格搜索就是这些超参数的值,通过字典形式传参进去,然后进行选择最佳

    3.api

        sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)

            estimator:估计器对象

            param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}

            cv:指定几折交叉验证

            fit:输入训练数据

            score:准确率

        结果分析:

            bestscore__:在交叉验证中验证的最好结果

            bestestimator:最好的参数模型

            cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值