• 机器学习(七):sklearn转换器估计器及K-近邻算法


    在这里插入图片描述

    📢📢📢📣📣📣
    🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
    🏅🏅🏅作者简介:Python领域优质创作者🏆 CSDN年度博客之星🏆 阿里云专家博主🏆 华为云享专家🏆 51CTO专家博主🏆
    💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
    💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
    🍉🍉🍉一万次悲伤,依然会有Dream,我一直在最温暖的地方等你~🌈🌈🌈
    🌟🌟🌟✨✨✨

    前言:
    ❤️本文选自:零基础学Python】本课程是针对Python入门&进阶打造的一全套课程,在这里,我将会一 一更新Python基础语法、Python爬虫、Web开发、 Django框架、Flask框架以及人工智能相关知识,帮助你成为Python大神,如果你喜欢的话就抓紧收藏订阅起来吧~💘💘💘

    在这里插入图片描述

    一、转换器和估计器

    1. 转换器

    想一下之前做的特征工程的步骤?

    • 1、实例化 (实例化的是一个转换器类(Transformer))
    • 2、调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)

    我们把特征工程的接口称之为转换器,其中转换器调用有这么几种形式:

    • 标准化:
      (x - mean) / std
    • fit_transform()
      fit() 计算 每一列的平均值、标准差
      transform() (x - mean) / std进行最终的转换

    这几个方法之间的区别是什么呢?我们看以下代码就清楚了

    In [1]: from sklearn.preprocessing import StandardScaler
    
    In [2]: std1 = StandardScaler()
    
    In [3]: a = [[1,2,3], [4,5,6]]
    
    In [4]: std1.fit_transform(a)
    Out[4]:
    array([[-1., -1., -1.],
           [ 1.,  1.,  1.]])
    
    In [5]: std2 = StandardScaler()
    
    In [6]: std2.fit(a)
    Out[6]: StandardScaler(copy=True, with_mean=True, with_std=True)
    
    In [7]: std2.transform(a)
    Out[7]:
    array([[-1., -1., -1.],
           [ 1.,  1.,  1.]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    从中可以看出,fit_transform的作用相当于transform加上fit。但是为什么还要提供单独的fit呢, 我们还是使用原来的std2来进行标准化看看:

    In [8]: b = [[7,8,9], [10, 11, 12]]
    
    In [9]: std2.transform(b)
    Out[9]:
    array([[3., 3., 3.],
           [5., 5., 5.]])
    
    In [10]: std2.fit_transform(b)
    Out[10]:
    array([[-1., -1., -1.],
           [ 1.,  1.,  1.]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.估计器(sklearn机器学习算法的实现)

    在sklearn中,估计器(estimator)是一个重要的角色,是一类实现了算法的API

    • 1 实例化一个estimator
    • 2 estimator.fit(x_train, y_train) 计算
      —— 调用完毕,模型生成
    • 3 模型评估:
      1)直接比对真实值和预测值
      y_predict = estimator.predict(x_test)
      y_test == y_predict
      2)计算准确率
      accuracy = estimator.score(x_test, y_test)

    种类:
    1、用于分类的估计器:

    • sklearn.neighbors k-近邻算法
    • sklearn.naive_bayes 贝叶斯
    • sklearn.linear_model.LogisticRegression 逻辑回归
    • sklearn.tree 决策树与随机森林

    2、用于回归的估计器:

    • sklearn.linear_model.LinearRegression 线性回归
    • sklearn.linear_model.Ridge 岭回归

    3、用于无监督学习的估计器

    • sklearn.cluster.KMeans 聚类

    3.估计器工作流程

    在这里插入图片描述

    二、K-近邻算法

    1.K-近邻算法(KNN)

    在这里插入图片描述
    你的“邻居”来推断出你的类别

    2. 定义

    如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

    来源:KNN算法最早是由Cover和Hart提出的一种分类算法

    3. 距离公式

    两个样本的距离可以通过如下公式计算,又叫欧式距离
    在这里插入图片描述

    三、电影类型分析

    假设我们有现在几部电影
    在这里插入图片描述
    其中? 号电影不知道类别,如何去预测?我们可以利用K近邻算法的思想
    在这里插入图片描述

    1 问题

    如果取的最近的电影数量不一样?会是什么结果?
    k = 1 爱情片
    k = 2 爱情片
    ……
    k = 6 无法确定
    k = 7 动作片

    如果取的最近的电影数量不一样?会是什么结果?
    - k 值取得过小,容易受到异常点的影响
    - k 值取得过大,样本不均衡的影响

    2 K-近邻算法数据的特征工程处理

    结合前面的约会对象数据,分析K-近邻算法需要做什么样的处理
    无量纲化的处理
    标准化

    四、K-近邻算法API

    sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
    n_neighbors:k值

    • n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
    • algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)

    1.步骤

    鸢尾花种类预测:
    数据,我们用的就是sklearn中自带的鸢尾花数据。
    1)获取数据
    2)数据集划分
    3)特征工程
    标准化
    4)KNN预估器流程
    5)模型评估

    2.代码

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    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=22)
    
        # 3)特征工程:标准化
        transfer = StandardScaler()
        x_train = transfer.fit_transform(x_train)
        x_test = transfer.transform(x_test)
    
        # 4)KNN算法预估器
        estimator = KNeighborsClassifier(n_neighbors=3)
        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 None
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    3.结果及分析

    在这里插入图片描述
    结果分析:
    准确率: 分类算法的评估之一

    1、k值取多大?有什么影响?
    k值取很小:容易受到异常点的影响

    k值取很大:受到样本均衡的问题

    2、性能问题?
    距离计算上面,时间复杂度高

    五、K-近邻总结

    优点:
    简单,易于理解,易于实现,无需训练

    缺点:

    • 懒惰算法,对测试样本分类时的计算量大,内存开销大
    • 必须指定K值,K值选择不当则分类精度不能保证

    使用场景: 小数据场景,几千~几万样本,具体场景具体业务去测试

    【系列好文推荐】

    🎯🎯🎯
    零基础学Python 开篇–全套学习路线
    零基础学Python–Web开发(七):登录实现及功能测试
    零基础学Python 机器学习实战——疫情数据分析与预测实战

    🎯🎯🎯

    欢迎订阅本专栏: 零基础学Python 系列课程是针对Python入门&进阶打造的一全套课程,在这里,我将会一 一更新Python基础语法、Python爬虫、Web开发、 Django框架、Flask框架以及人工智能相关知识,帮助你成为Python大神,如果你喜欢的话就抓紧收藏订阅起来吧~💘💘💘
    💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
    🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
    在这里插入图片描述
    在这里插入图片描述
    ⬇️⬇️ ⬇️ 商务合作|交流学习|粉丝福利|Python全套资料⬇️ ⬇️ ⬇️ 欢迎联系~

  • 相关阅读:
    在Vue中使用vant的方法,踩坑in .node_modulesvantesdialogDialog.js
    【数据结构与算法】之深入解析“检测正方形”的求解思路与算法示例
    Java面试-轻松搞定Java面试集合相关题目
    Linux使用手册(自用)
    二进制部署1.23.4版本k8s集群-2-安装DNS服务
    CB利用链及无依赖打Shiro
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    【C#版本】微信公众号模板消息对接(一)(图文详解)
    (二)基于企业现金流预测的投资决策-算法实现
    负载姜黄素的葡聚糖修饰的钆掺杂的空心介孔二氧化硅纳米材料(科研级)
  • 原文地址:https://blog.csdn.net/weixin_51390582/article/details/126325362