Python 机器学习02 - 常见分类算法

news/2025/11/6 13:51:12/文章来源:https://www.cnblogs.com/luohengstudy/p/19196325

image

 

image

 

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier, export_graphvizdef 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 Nonedef knn_iris_gscv():"""用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()# 加入网格搜索与交叉验证# 参数准备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)# 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)# 最佳参数:best_params_print("最佳参数:\n", estimator.best_params_)# 最佳结果:best_score_print("最佳结果:\n", estimator.best_score_)# 最佳估计器:best_estimator_print("最佳估计器:\n", estimator.best_estimator_)# 交叉验证结果:cv_results_print("交叉验证结果:\n", estimator.cv_results_)return Nonedef nb_news():"""用朴素贝叶斯算法对新闻进行分类:return:"""# 1)获取数据news = fetch_20newsgroups(subset="all")# 2)划分数据集x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)# 3)特征工程:文本特征抽取-tfidftransfer = TfidfVectorizer()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4)朴素贝叶斯算法预估器流程estimator = MultinomialNB()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 Nonedef decision_iris():"""用决策树对鸢尾花进行分类: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)决策树预估器estimator = DecisionTreeClassifier(criterion="entropy")estimator.fit(x_train, y_train)# 4)模型评估# 方法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)# 可视化决策树export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)return Noneif __name__ == "__main__":# 代码1: 用KNN算法对鸢尾花进行分类# knn_iris()# 代码2:用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证# knn_iris_gscv()# 代码3:用朴素贝叶斯算法对新闻进行分类# nb_news()# 代码4:用决策树对鸢尾花进行分类decision_iris()

 

分类算法目标值:类别1、sklearn转换器和预估器
2、KNN算法
3、模型选择与调优
4、朴素贝叶斯算法
5、决策树
6、随机森林3.1 sklearn转换器和估计器转换器估计器(estimator)3.1.1 转换器 - 特征工程的父类1 实例化 (实例化的是一个转换器类(Transformer))2 调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)标准化:(x - mean) / stdfit_transform()fit()           计算 每一列的平均值、标准差transform()     (x - mean) / std进行最终的转换3.1.2 估计器(sklearn机器学习算法的实现)估计器(estimator)1 实例化一个estimator2 estimator.fit(x_train, y_train) 计算—— 调用完毕,模型生成3 模型评估:1)直接比对真实值和预测值y_predict = estimator.predict(x_test)y_test == y_predict2)计算准确率accuracy = estimator.score(x_test, y_test)
3.2 K-近邻算法3.2.1 什么是K-近邻算法KNN核心思想:你的“邻居”来推断出你的类别1 K-近邻算法(KNN)原理k = 1容易受到异常点的影响如何确定谁是邻居?计算距离:距离公式欧氏距离曼哈顿距离 绝对值距离明可夫斯基距离2 电影类型分析k = 1 爱情片k = 2 爱情片……k = 6 无法确定k = 7 动作片如果取的最近的电影数量不一样?会是什么结果?k 值取得过小,容易受到异常点的影响k 值取得过大,样本不均衡的影响结合前面的约会对象数据,分析K-近邻算法需要做什么样的处理无量纲化的处理标准化sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')n_neighbors:k值3.2.3 案例1:鸢尾花种类预测1)获取数据2)数据集划分3)特征工程标准化4)KNN预估器流程5)模型评估3.2.4 K-近邻总结优点:简单,易于理解,易于实现,无需训练缺点:1)必须指定K值,K值选择不当则分类精度不能保证2)懒惰算法,对测试样本分类时的计算量大,内存开销大使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试3.3 模型选择与调优3.3.1 什么是交叉验证(cross validation)3.3.2 超参数搜索-网格搜索(Grid Search)k的取值[1, 3, 5, 7, 9, 11]暴力破解3.3.3 鸢尾花案例增加K值调优3.2.4 案例:预测facebook签到位置流程分析:1)获取数据2)数据处理目的:特征值 x目标值 ya.缩小数据范围2 < x < 2.51.0 < y < 1.5b.time -> 年月日时分秒c.过滤签到次数少的地点数据集划分3)特征工程:标准化4)KNN算法预估流程5)模型选择与调优6)模型评估3.4 朴素贝叶斯算法3.4.1 什么是朴素贝叶斯分类方法3.4.2 概率基础1 概率(Probability)定义3.4.3 联合概率、条件概率与相互独立联合概率:包含多个条件,且所有条件同时成立的概率P(程序员, 匀称) P(程序员, 超重|喜欢)P(A, B)条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率P(程序员|喜欢) P(程序员, 超重|喜欢)P(A|B)相互独立:P(A, B) = P(A)P(B) <=> 事件A与事件B相互独立朴素?假设:特征与特征之间是相互独立朴素贝叶斯算法:朴素 + 贝叶斯应用场景:文本分类单词作为特征拉普拉斯平滑系数3.4.6 案例:20类新闻分类1)获取数据2)划分数据集3)特征工程文本特征抽取4)朴素贝叶斯预估器流程5)模型评估3.4.7 朴素贝叶斯算法总结优点:对缺失数据不太敏感,算法也比较简单,常用于文本分类。分类准确度高,速度快缺点:由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好我爱北京天安门
3.5 决策树3.5.1 认识决策树如何高效的进行决策?特征的先后顺序3.5.2 决策树分类原理详解已知 四个特征值 预测 是否贷款给某个人先看房子,再工作 -> 是否贷款 只看了两个特征年龄,信贷情况,工作 看了三个特征信息论基础1)信息香农:消除随机不定性的东西小明 年龄 “我今年18岁” - 信息小华 ”小明明年19岁” - 不是信息2)信息的衡量 - 信息量 - 信息熵bitg(D,A) = H(D) - 条件熵H(D|A)4 决策树的划分依据之一------信息增益没有免费的午餐3.5.5 决策树可视化3.5.6 决策树总结优点:可视化 - 可解释能力强缺点:容易产生过拟合3.5.4 案例:泰坦尼克号乘客生存预测流程分析:特征值 目标值1)获取数据2)数据处理缺失值处理特征值 -> 字典类型3)准备好特征值 目标值4)划分数据集5)特征工程:字典特征抽取6)决策树预估器流程7)模型评估
3.6 集成学习方法之随机森林3.6.1 什么是集成学习方法3.6.2 什么是随机森林随机森林:包含多个决策树的分类器3.6.3 随机森林原理过程训练集:N个样本特征值 目标值M个特征随机两个随机训练集随机 - N个样本中随机有放回的抽样N个bootstrap 随机有放回抽样[1, 2, 3, 4, 5]新的树的训练集[2, 2, 3, 1, 5]特征随机 - 从M个特征中随机抽取m个特征M >> m降维3.6.6 总结能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维          

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/957722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统基础文件属性(二)

系统基础优化知识 (二)系统重要目录介绍: /usr/local --- 存放安装第三方软件程序数据 系统安装部署软件方法:yum 4种安装方式 文件属性详细介绍: 1)文件类型介绍:有哪些文件分类 文件相关命令 2)文件用…

量化选股与量化交易第882篇:通达信量能趋势启动 - Leone

通达信量能趋势启动主图ZYG1:=REF(LOW,1); ZYG2:=SMA(ABS(LOW-ZYG1),3,1)/SMA(MAX(LOW-ZYG1,0),3,1)*100; ZYG3:=EMA(IF(CLOSE>REF(CLOSE,1)*1.02,ZYG2*10,ZYG2/10),3); ZYG4:=LLV(LOW,38); ZYG5:=HHV(ZYG3,38); ZY…

量化选股与量化交易第883篇:通达信顶底雷达 - Leone

通达信顶底雷达副图章鱼:LLV(LOW,10) NODRAW; 鱼哥:HHV(HIGH,25) NODRAW; 章鱼出:=3.2,COLORCYAN; STICKLINE(C>0,3.2,3.2,1,0),COLORFF1199; 清仓卖出:3.5,COLOR0088FF; 章鱼线:=EMA((CLOSE-章鱼)/(鱼哥-章鱼)*4,4…

量化选股与量化交易第878篇:通达信起爆点探测器 - Leone

起爆点探测器主图STICKLINE(C>=O,H,L,0,1), COLORRED; STICKLINE(C>=O,C,O,3,0), COLORRED; STICKLINE(C< O,H,L,0,0), COLORFFFF00; STICKLINE(C< O,C,O,3,0),COLORFFFF00; ZYG9:MA(CLOSE,5); ZYG31:=MA(…

量化选股与量化交易第879篇:通达信强势反转战法 - Leone

通达信强势反转战法主图N1:=20; N2:=60; 鱼哥1:=(LOW+HIGH+CLOSE)/3; X: MA(鱼哥1,5); A1: HHV(X,N1)COLORMAGENTA; A2: HHV(X,N2),COLORGREEN; A3: HHV(HIGH,N2)*0.98,COLOR0000FF; B1: LLV(X,N1); B2: LLV(LOW,N2)*1…

量化选股与量化交易第886篇:通达信收割机 - Leone

通达信收割机主图DRAWTEXT_FIX(1,0.005,0,0,所属风格:),COLORYELLOW; DRAWTEXT_FIX(1,0.06,0,0,FGBLOCK),COLORYELLOW; DRAWTEXT_FIX(1,0.005,0.05,0,所属概念:),COLORMAGENTA; DRAWTEXT_FIX(1,0.06,0.05,0,GNBLOCK),C…

量化选股与量化交易第888篇:通达信龙头趋势量化 - Leone

通达信龙头趋势量化主图DRAWGBK(C>0,RGB(0,10,10),RGB(88,0,0),0,0,0); DRAWGBK(C>0,RGB(40,120,20),RGB(00,00,00),0,0,1); DRAWGBK(C>0,RGB(80,100,120),RGB(00,00,00),0,0,1); DRAWKLINE(HIGH,OPEN,LOW,CL…

【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备 - 教程

【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

详细介绍:vue3和uniapp的生命周期

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

系统基础文件属性

系统基础优化知识系统重要文件介绍: /etc 目录重要文件信息:配置变量与别名文件 /var 目录重要文件信息: /proc目录重要文件信息:系统重要目录介绍: /usr/local --- 存放安装第三方软件程序数据 系统安装部署软…

DMS Airflow:企业级数据工作流编排平台的专业实践

DMS Airflow 是基于 Apache Airflow 构建的企业级数据工作流编排平台,通过深度集成阿里云 DMS(Data Management Service)系统的各项能力,为数据团队提供了强大的工作流调度、监控和管理能力。本文将从 Airflow 的高…

iOS HTTPS 抓包,从原理到落地排查的工程化方法(Charles / tcpdump / Sniffmaster)

面向开发与运维的 iOS HTTPS 抓包实战:按 TCP→TLS→应用三层排查,列出 Charles/Fiddler、tcpdump、Wireshark、mitmproxy 的职责,提供可复制命令与故障模板,并说明在代理受限或协议边界(QUIC/HTTP3)时如何用替代…

vite-plugin-top-level-await Failed to convert rust `String` into napi `string`

https://github.com/paloitsingapore/spreadjs-vite https://developer.mescius.com/spreadjs/docs/javascript-frameworks/spreadjs-with-individual-modules/spreadjs-with-vite

计算机视觉领域的里程碑:关键贡献者、核心理念与技术演进 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

torchvision 使用本地 FashionMNIST 数据集进行导入的方法

torchvision 使用本地 FashionMNIST 数据集进行导入的方法 一、 错误示例: 不解压、随便一个路径二、正确操作 解压它们并放在指定的地方: 你需要放在对应数据的 \FashionMNIST\raw\ 文件夹下。具体的结构请注意是这…

深入解析:产品运营必备的职场通用能力有哪些?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Redis数据持久化、高阶数据结构与事务脚本【第二部分】

可以结合之前的文章配合学习:【🔥RDB还是AOF ? 】Redis持久化原理全景解读与生产级决策手册引子:Redis商城的架构演进之路在"Redis商城"的技术团队中,架构师小明正面临着一系列技术挑战。让我们跟随他…

openEuler + Nginx 高性能 Web 服务深度评测

​ 一、前言:为什么选择 Nginx + openEuler 在当今互联网时代,Web 服务器作为流量入口的核心组件,其性能直接决定了用户体验和系统承载能力。本次评测选择在 openEuler 操作系统上部署 Nginx 集群,旨在深度挖掘两者…