『机器学习』了解分类,回归,聚类算法,实现小规模预测
文章目录
- 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} (a1−b1)2+(a2−b2)2+(a3−b3)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 分析过程下载
『机器学习』了解分类,回归,聚类算法,实现小规模预测相关推荐
- 机器学习中常见的分类 回归 聚类算法小结
Date: 2019-08-15 今天开始总结和复习机器学习知识点: 一句话概括: 1. 聚类:无监督学习,学习结果将产生几个集合,集合中的元素彼此相似: 2. 分类:有监督学习,学习结果将产生几个函 ...
- Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略
Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...
- AI:人工智能领域算法思维导图集合之有监督学习/无监督学习/强化学习类型的具体算法简介(预测函数/优化目标/求解算法)、分类/回归/聚类/降维算法模型选择思路、11类机器学习算法详细分类之详细攻略
AI:人工智能领域算法思维导图集合之有监督学习/无监督学习/强化学习类型的具体算法简介(预测函数/优化目标/求解算法).分类/回归/聚类/降维算法模型选择思路.11类机器学习算法详细分类(决策树/贝叶 ...
- 机器学习-Sklearn-07(无监督学习聚类算法KMeans)
机器学习-Sklearn-07(无监督学习聚类算法KMeans) 学习07 1 概述 1.1 无监督学习与聚类算法 聚类算法又叫做"无监督分类",其目的是将数据划分成有意义或有用的 ...
- 分类与聚类算法基础了解
分类与聚类,监督学习与无监督学习 在讲具体的分类和聚类算法之前,有必要讲一下什么是分类,什么是聚类,以及都包含哪些具体算法或问题. Classification (分类),对于一个 classifie ...
- 以最易懂的人话讲分类和聚类算法(建议分享和收藏)
以最易懂的人话讲分类和聚类算法(建议分享) 今天在使用聚类方法进行客户价值分析时遇到了个问题,将我卡住了半个小时,实际上现在想来是一个很简单的问题,但是大家都知道,一个人脑子短路时就是会一个小学数学题 ...
- 【毕业设计_课程设计】基于机器学习的情感分类与分析算法设计与实现(源码+论文)
文章目录 0 项目说明 1 研究目的 2 研究方法 3 研究结论 4 项目流程 4.1 获取微博文本 4.2 SVM初步分类 4.3 使用朴素贝叶斯分类 4.4 AdaBoost 4.4.1 二分类A ...
- 『机器学习』入门教程汇总
这是我们老师根据现有资源整理的一个机器学习路径.涵盖了Numpy,Scipy,Pandas,Scikit-learn,Matplotlib 等开源工具的学习,并完成从数据清理.数据分析.模型构建,到最 ...
- 【机器学习】全面解析Kmeans聚类算法(Python)
一.聚类简介 Clustering (聚类)是常见的unsupervised learning (无监督学习)方法,简单地说就是把相似的数据样本分到一组(簇),聚类的过程,我们并不清楚某一类是什么(通 ...
最新文章
- 最重要的会计期间是_非会计专业考生如何备考注会?难度多大?
- 自适应滤波器_有源电力滤波器的使用意义和作用
- Android关机流程源码分析
- [NOTE] XVWA靶场练习笔记
- 项目管理工具篇(一、Maven)
- 在Spring中使用JDBCJobStore配置Quartz
- python二维列表切片,python – 切片多维列表
- Linux下SCP使用技巧
- Python 分析国庆热门旅游景点,告诉你哪些地方好玩、便宜、人又少!
- List、Map、Set三个接口,存取元素时,各有什么特点
- AR导航真的有前途,马云领衔1亿2500万投资
- 各种开源协议介绍 BSD、Apache Licence、GPLv2 、v3 、LGPL、MIT
- ssh: connect to host gitee.com port 22: Connection timed out fatal: Could not read from remote repos
- UltraISO9.3.0.2610中文绿色注册版
- 内网远程协助工具_分享几个常用的免费远程软件
- 什么是测试开发工程师(SET)?
- 计算机信息科学学科分类,-学科分类与代码.doc
- 大学四年恍然若梦,一直走在路上
- Longest Increasing Subsequence
- 一文看透 Kotlin 协程本质