文章目录

  • 1、SkLearn 数据库
    • 鸢尾花数据集
    • 数据集划分
  • 2、特征提取
    • 字典提取
    • 文本提取
  • 3、特征预处理
    • 归一化
    • 标准化
  • 4、特征降维
    • 特征选择
      • Fitter(过滤式)
      • Embedded(嵌入式)
  • 5、实战分析
    • 探究用户对物品类别的喜好
  • 6、SkLearn 转换估计器
    • 转换器
    • 估计器
  • 7、KNN算法
    • 原理
    • 分析
    • 实战
    • 总结
  • 8、模型选择与调优
    • 交叉验证
    • 超参数搜索 - 网格搜索
    • 实战分析

1、SkLearn 数据库

鸢尾花数据集

'Sklearn 数据集使用'iris = load_iris()

数据集划分

'划分数据集'x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=25)

#/2、特征工程

2、特征提取

将任意数据转换成可以用于机器学习的数字特征:

  • 字典提取(特征离散化)
  • 文本提取
  • 图像提取

字典提取

'字典特征提取 - DictVectorizer'data = [{'city': '北京', '温度': 100},{'city': '上海', '温度': 50},{'city': '芜湖', '温度': 80},]transfer  = DictVectorizer(sparse=False)data_new  = transfer.fit_transform(data)print(transfer.get_feature_names())print(data_new)

文本提取

'文本特征提取 - CountVectorizer'data = ['life is short,i like like python','l am the sugar peple']transfer = CountVectorizer()data_new = transfer.fit_transform(data)print(transfer.get_feature_names())print(data_new.toarray())  'toarray 禁用稀疏矩阵''中文特征提取 - jieba - CountVectorizer'def cut_word(text):'分词接口'res = " ".join(list(jieba.cut(text)))return resdata = ['今天是美好的一天,我可真开心','我们看到的星空是大自然的力量,不可以破坏自然','了解事物的真正含义,取决于我们所了解的事物']data_new = []for i in data:data_new.append(cut_word(i))transfer = CountVectorizer()data_new2 = transfer.fit_transform(data_new)print(transfer.get_feature_names())print(data_new2.toarray())'文本特征提取 2 - TfidfVectorizer'data = ['今天是美好的一天,我可真开心','我们看到的星空是大自然的力量,不可以破坏自然','了解事物的真正含义,取决于我们所了解的事物']data_new = []for i in data:data_new.append(cut_word(i))transfer = TfidfVectorizer()data_new = transfer.fit_transform(data_new)print(transfer.get_feature_names())print(data_new.toarray())

3、特征预处理

​ 通过转换函数,将数据转化成更适合算法模型数据的过程。

​ 归一化/标准化:特征的单位、方差或者大小相差巨大,容易影响分析结果。

归一化

'归一化 - MinMaxScaler'data = pd.read_csv('data.txt')'取所有行,前三列'data = data.iloc[:,:3]transfer = MinMaxScaler(feature_range=[0,1])data_new = transfer.fit_transform(data)print(transfer.get_feature_names_out())print(data_new)

标准化

​ 由于归一化采用的是最大值和最小值计算,如果许多异常点刚好是最大值或最小值,就会造成数据误差较大,故采用标准化。

'标准化'data = pd.read_csv('data.txt')'取所有行,前三列'data = data.iloc[:, :3]transfer = StandardScaler()data_new = transfer.fit_transform(data)print(transfer.get_feature_names_out())print(data_new)

4、特征降维

二维数组进行降维:

  • 降低特征个数(列数)
  • 降低特征相关性(冗余)

特征选择

​ 从冗余或相关的数据中,找到主要特征

Fitter(过滤式)

​ 研究特征本身特点,特征与特征和:

  • 方差选择法:低方差特征过滤
  • 相关系数:特征之间相关程度
    • 选取其一
    • 加权求和
    • 主成分分析:维数压缩,高维数据->低维数据,可能会舍弃原变量,生成新变量
'低方差过滤'data = pd.read_csv('factor_returns.csv')data = data.iloc[:,1:-2]transfer = VarianceThreshold(threshold=5)data_new = transfer.fit_transform(data)print(transfer.get_feature_names_out())print(data_new)'相关系数'r = pearsonr(data["pe_ratio"],data["pb_ratio"])print(r)

相关性可以用 Matplotlib 画图来直观判断:

'图观相关性'plt.figure(figsize=(20,8), dpi=100)plt.scatter(data["revenue"],data["total_expense"])plt.show()
'主成分分析'    data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]    transfer = PCA(n_components=2)    data_new = transfer.fit_transform(data)    print(data_new)

Embedded(嵌入式)

  • 决策树
  • 正则化
  • 深度学习:卷积神经网络

5、实战分析

探究用户对物品类别的喜好

import pandas as pdfrom sklearn.decomposition import PCA'导入表'order_products = pd.read_csv('order_products__prior.csv')products = pd.read_csv('products.csv')orders = pd.read_csv('orders.csv')aisles = pd.read_csv('aisles.csv')'合并表'temp1 = pd.merge(aisles,products,on=["aisle_id","aisle_id"])temp2 = pd.merge(temp1,order_products,on=["product_id","product_id"])temp3 = pd.merge(temp2,orders,on=["order_id","order_id"])'交叉表'table = pd.crosstab(temp3["user_id"],temp3["aisle"])'PCA降维'transfer = PCA(n_components=0.95)data_new = transfer.fit_transform(table)print(data_new)

6、SkLearn 转换估计器

转换器

上文中特征工程的步骤:

  • 实例化转换器
  • 调用fit_transform

转换器有 3 种类型:

  • fit_fit_transform :综合下面两个
  • fit :计算每一列平均值、标准差
  • transform :(x-mean)/std 转换

估计器

估计器的种类:

  • 分类估计器

    • sklearn.neighbors KNN算法
    • sklearn.naive_bayes 贝叶斯算法
    • sklearn.linear_model.LogisticRefression 逻辑回归算法
    • sklearn.tree 决策树与随机森林
  • 回归估计器
    • sklearn.linear_model.LinearRegression 线性回归算法
    • sklearn.linear_model.Ridge 岭回归算法
  • 无监督学习估计器
    • sklearn.cluster.KMeans 聚类算法

估计器工作流程:

估计器使用流程:

  • 实例化估计器
  • 调用 fit
  • 模型评估
    • 直接比对:y_predict = estimator.predict(x_test) , y_predict == y_test
    • 计算准确率:accuacy = estimator.score(x_test,y_test)

7、KNN算法

原理

定义:

​ 如果一个样本在特征空间中的 k 个最相似的样本中的大多数属于某一类别,则这个样本也是这个类别。

距离公式:
( a 1 − b 1 ) 2 + ( a 2 − b 2 ) 2 + ( a 3 − b 3 ) 2 \sqrt{(a1-b1)^2+(a2-b2)^2+(a3-b3)^2} (a1b1)2+(a2b2)2+(a3b3)2


注意事项:

  • K 取得越大,样本不均衡影响。K 取得越小,受异常点影响。
  • 当样本特征相差较大时,需要进行无量纲化。

分析

​ 假设现在有几部电影:

​ 其中最后一个电影不知道是什么类型,使用 KNN 算法来预测它的类型。

实战

​ 这里我们使用鸢尾花数据集,进行种类预测。

# 1、获取数据iris = load_iris()# 2、划分数据集x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6)# 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_trai# 5、模型评估# 方法1:直接对比预测值与真实值y_predict = estimator.predict(x_test)print("预测结果\n",y_predict)print("直接比对\n",y_test == y_predic# 方法2:计算准确率r = estimator.score(x_test,y_test)print("预测准确率\n",r)

总结

优点:

  • 简单,易于理解,无需训练

缺点:

  • 懒惰算法,样本大时内存开销大
  • 必须指定 K 值,K 值选择不当会导致分类精度误差大

使用场景:

  • 小数据,几千~几万样本

8、模型选择与调优

交叉验证

​ 将拿到的数据,分为训练和验证集。以下图为例,数据分成四份,其中 1 份做验证集,另外 3 份做测试集。经过四组测试,每次更换不同的验证集。将 4 组模型得到的结果,取平均值做最终结果。

为啥需要交叉验证?:

​ 在样本较少时,让评估模型更加准确。

超参数搜索 - 网格搜索

​ 每组超参数都采用交叉验证,最后选出最优的 K 值建立模型。


​ 优化上节内容,对鸢尾花案例加上 K 值调优

   # 1、获取数据iris = load_iris()# 2、划分数据集x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6)# 3、特征工程:标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4、KNN算法estimator = KNeighborsClassifier()# 5、网格搜索交叉验证 - 由它来选择合适的 K 值param_dict = {"n_neighbors":[1,3,5,7,9,11]}estimator = GridSearchCV(estimator,param_grid=param_dict,cv=10)estimator.fit(x_train, y_train)# 6、模型评估# 方法1:直接对比预测值与真实值y_predict = estimator.predict(x_test)print("预测结果\n",y_predict)print("直接比对\n",y_test == y_predict)# 方法2:计算准确率r = estimator.score(x_test,y_test)print("预测准确率\n",r)# 7、最佳参数print("最佳参数\n",estimator.best_params_)print("最佳结果\n",estimator.best_score_)print("最佳估计器\n",estimator.best_estimator_)print("交叉验证结果\n",estimator.cv_results_)

实战分析

​ 预测分析 FaceBook 签到位置

Jupyter 文件:FaceBook 分析过程下载

『机器学习』了解分类,回归,聚类算法,实现小规模预测相关推荐

  1. 机器学习中常见的分类 回归 聚类算法小结

    Date: 2019-08-15 今天开始总结和复习机器学习知识点: 一句话概括: 1. 聚类:无监督学习,学习结果将产生几个集合,集合中的元素彼此相似: 2. 分类:有监督学习,学习结果将产生几个函 ...

  2. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  3. AI:人工智能领域算法思维导图集合之有监督学习/无监督学习/强化学习类型的具体算法简介(预测函数/优化目标/求解算法)、分类/回归/聚类/降维算法模型选择思路、11类机器学习算法详细分类之详细攻略

    AI:人工智能领域算法思维导图集合之有监督学习/无监督学习/强化学习类型的具体算法简介(预测函数/优化目标/求解算法).分类/回归/聚类/降维算法模型选择思路.11类机器学习算法详细分类(决策树/贝叶 ...

  4. 机器学习-Sklearn-07(无监督学习聚类算法KMeans)

    机器学习-Sklearn-07(无监督学习聚类算法KMeans) 学习07 1 概述 1.1 无监督学习与聚类算法 聚类算法又叫做"无监督分类",其目的是将数据划分成有意义或有用的 ...

  5. 分类与聚类算法基础了解

    分类与聚类,监督学习与无监督学习 在讲具体的分类和聚类算法之前,有必要讲一下什么是分类,什么是聚类,以及都包含哪些具体算法或问题. Classification (分类),对于一个 classifie ...

  6. 以最易懂的人话讲分类和聚类算法(建议分享和收藏)

    以最易懂的人话讲分类和聚类算法(建议分享) 今天在使用聚类方法进行客户价值分析时遇到了个问题,将我卡住了半个小时,实际上现在想来是一个很简单的问题,但是大家都知道,一个人脑子短路时就是会一个小学数学题 ...

  7. 【毕业设计_课程设计】基于机器学习的情感分类与分析算法设计与实现(源码+论文)

    文章目录 0 项目说明 1 研究目的 2 研究方法 3 研究结论 4 项目流程 4.1 获取微博文本 4.2 SVM初步分类 4.3 使用朴素贝叶斯分类 4.4 AdaBoost 4.4.1 二分类A ...

  8. 『机器学习』入门教程汇总

    这是我们老师根据现有资源整理的一个机器学习路径.涵盖了Numpy,Scipy,Pandas,Scikit-learn,Matplotlib 等开源工具的学习,并完成从数据清理.数据分析.模型构建,到最 ...

  9. 【机器学习】全面解析Kmeans聚类算法(Python)

    一.聚类简介 Clustering (聚类)是常见的unsupervised learning (无监督学习)方法,简单地说就是把相似的数据样本分到一组(簇),聚类的过程,我们并不清楚某一类是什么(通 ...

最新文章

  1. 最重要的会计期间是_非会计专业考生如何备考注会?难度多大?
  2. 自适应滤波器_有源电力滤波器的使用意义和作用
  3. Android关机流程源码分析
  4. [NOTE] XVWA靶场练习笔记
  5. 项目管理工具篇(一、Maven)
  6. 在Spring中使用JDBCJobStore配置Quartz
  7. python二维列表切片,python – 切片多维列表
  8. Linux下SCP使用技巧
  9. Python 分析国庆热门旅游景点,告诉你哪些地方好玩、便宜、人又少!
  10. List、Map、Set三个接口,存取元素时,各有什么特点
  11. AR导航真的有前途,马云领衔1亿2500万投资
  12. 各种开源协议介绍 BSD、Apache Licence、GPLv2 、v3 、LGPL、MIT
  13. ssh: connect to host gitee.com port 22: Connection timed out fatal: Could not read from remote repos
  14. UltraISO9.3.0.2610中文绿色注册版
  15. 内网远程协助工具_分享几个常用的免费远程软件
  16. 什么是测试开发工程师(SET)?
  17. 计算机信息科学学科分类,-学科分类与代码.doc
  18. 大学四年恍然若梦,一直走在路上
  19. Longest Increasing Subsequence
  20. 一文看透 Kotlin 协程本质

热门文章

  1. Java ~ Reference【总结】
  2. Bootstrap文字颜色和背景颜色
  3. 树莓派linux系统中文乱码,树莓派入门,软件安装,中文显示
  4. 英雄爱三国如何在电脑上玩 英雄爱三国模拟器玩法教程
  5. 【自己动手,打造自己的Wallpaper引擎(Win10/Win11)】
  6. 为什么说寒湿是万病之源?【瑶一堂】三味真火养生馆
  7. 什么是健康,健康的含义是什么?
  8. 用U盘安装或重装原版系统
  9. echarts中饼图显示百分比
  10. JAVA线程安全Map解析