《python机器学习从入门到高级》分类算法实现:上(含详细代码)

简介: 《python机器学习从入门到高级》分类算法实现:上(含详细代码)

《python机器学习从入门到高级》分类算法:(上)

  • ✨本文收录于《python机器学习从入门到高级》专栏,此专栏主要记录如何使用python实现机器学习模型,尽量坚持每周持续更新,欢迎大家订阅!
  • 🌸个人主页:JoJo的数据分析历险记
  • 📝个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
  • 💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏

本专栏主要从==代码角度==介绍如何使用python实现机器学习算法,想要了解具体机器学习理论的小伙伴,可以看我的这个专栏:统计学习方法

我们在之前的文章已经介绍了机器学习的一些基础概念,当拿到一个数据之后如何处理、如何评估一个模型、以及如何对模型调参等。接下来,我们正式开始学习如何实现机器学习的一些算法。
回归和==分类==是机器学习的两大最基本的问题,对于==分类算法==的详细理论部分。大家可以参考我这篇文章统计学习方法之分类算法详解
本文主要从python代码的角度来实现分类算法。

# 导入相关库
import sklearn
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
AI 代码解读

🌳1. 数据准备

下面我们以mnist数据集为例进行演示,这是一组由美国人口普查局的高中生和雇员手写的70000个数字图像。每个图像都用数字表示。也是分类问题非常经典的一个数据集

# 导入mnist数据集
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
mnist.keys()
AI 代码解读
dict_keys(['data', 'target', 'frame', 'categories', 'feature_names', 'target_names', 'DESCR', 'details', 'url'])


AI 代码解读

其中data是我们输入的特征,target0-9的数字

X, y = mnist["data"], mnist["target"]
X.shape,y.shape
AI 代码解读
((70000, 784), (70000,))


AI 代码解读

可以看出一共有70000图像,其中X一共有784个特征,这是因为图像是28×28的,每个特征是0-255之间的。下面我们通过imshow()函数将其进行还原

%matplotlib inline
import matplotlib as mpl
digit = X[0]
digit_image = digit.reshape((28, 28))#还原成28×28
plt.imshow(digit_image, cmap=mpl.cm.binary)
plt.axis("off")
plt.savefig("some_digit_plot")
plt.show()
AI 代码解读


png

从我们人类角度来看,我们很容易辨别它是5,我们要做的是,当给机器一张图片时,它能辨别出正确的数字吗?我们来看看y的值

y[0]
AI 代码解读
'5'


AI 代码解读

我们要实现的就是,给我们一张图片,不难发现这是一个==多分类任务==,下面我们正式进入模型建立,首先将数据集划分为==训练集和测试集==,这里简单的将前60000个划分为训练集,后10000个为测试集,具体代码如下

y = y.astype(np.uint8)#将y转换成整数
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
AI 代码解读

🌴2.简单二元分类实现

在实现多分类任务之前,我们先从一个简单的问题考虑,现在假设我只想知道给我一张图片,它是否是7(我最喜欢的数字)。这个时候就是一个简单的二分类问题,首先我们要将我们的目标变量进行转变,具体代码如下

y_train_7 = (y_train == 7)
y_test_7 = (y_test == 7)
AI 代码解读

现在,我们选择一个分类器并对其进行训练。我们先使用==SGD==(随机梯度下降)分类器

from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier(max_iter=1000, tol=1e-3, random_state=123)#设置random_state为了结果的重复性
sgd_clf.fit(X_train, y_train_7)
AI 代码解读
SGDClassifier(random_state=123)


AI 代码解读

训练好模型之后我们可以进行预测,以第一张图片为例,我们预测一下它是否是7(很显然我们知道不是)

sgd_clf.predict(X[0].reshape((1,-1)))
AI 代码解读
array([False])


AI 代码解读

可以看出判断正确了,在之前我们讨论了==模型评估==的方法,详细介绍看这篇文章:Python机器学习从入门到高级:模型评估和选择(含详细代码)
下面演示如何用代码实现各个评估指标

🌵3.模型评估

我们根据分类评估指标来看看SGD分类器效果

🌾3.1 准确率

from sklearn.model_selection import cross_val_score
cross_val_score(sgd_clf, X_train, y_train_7, cv=3, scoring="accuracy")
AI 代码解读
array([0.97565, 0.97655, 0.963  ])


AI 代码解读

🌿3.2 混淆矩阵

y_train_pred = sgd_clf.predict(X_train)
AI 代码解读
from sklearn.metrics import confusion_matrix
confusion_matrix(y_train_7, y_train_pred)
AI 代码解读
array([[53304,   431],
       [  550,  5715]], dtype=int64)


AI 代码解读

☘️3.3 召回率和精确度

from sklearn.metrics import precision_score, recall_score

print('precision:',precision_score(y_train_7, y_train_pred))
print('recall:',recall_score(y_train_7,y_train_pred))
AI 代码解读
precision: 0.929873088187439
recall: 0.9122106943335994


AI 代码解读

下面要用的matplotlib,想了解matplotlib可以看这篇文章:Python数据可视化大杀器之地阶技法:matplotlib(含详细代码)

🍁3.4 ROC曲线

from sklearn.metrics import roc_curve

fpr, tpr, thresholds = roc_curve(y_train_7, y_scores)
plt.plot(fpr, tpr, linewidth=2)
plt.plot([0, 1], [0, 1], 'k--') 
plt.axis([0, 1, 0, 1])                                   
plt.xlabel('False Positive Rate (Fall-Out)', fontsize=16) 
plt.ylabel('True Positive Rate (Recall)', fontsize=16)    
plt.grid(True)                  
AI 代码解读


png

本章的介绍到此介绍,下一章介绍==分类算法(下):如何完成多分类任务==

🎄推荐文章

🎉统计学习方法之分类算法详解
Python数据可视化大杀器之地阶技法:matplotlib(含详细代码)
🎉Python机器学习从入门到高级:模型评估和选择(含详细代码)

目录
打赏
0
0
0
0
11
分享
相关文章
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
86 7
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
DeepSeek安装部署指南,基于阿里云PAI零代码,小白也能轻松搞定!
阿里云PAI平台支持零代码一键部署DeepSeek-V3和DeepSeek-R1大模型,用户可轻松实现从训练到部署再到推理的全流程。通过PAI Model Gallery,开发者只需简单几步即可完成模型部署,享受高效便捷的AI开发体验。具体步骤包括:开通PAI服务、进入控制台选择模型、一键部署并获取调用信息。整个过程简单快捷,极大降低了使用门槛。
1178 43
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
近端策略优化(PPO)是深度强化学习中高效的策略优化方法,广泛应用于大语言模型的RLHF训练。PPO通过引入策略更新约束机制,平衡了更新幅度,提升了训练稳定性。其核心思想是在优势演员-评论家方法的基础上,采用裁剪和非裁剪项组成的替代目标函数,限制策略比率在[1-ϵ, 1+ϵ]区间内,防止过大的策略更新。本文详细探讨了PPO的基本原理、损失函数设计及PyTorch实现流程,提供了完整的代码示例。
462 10
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
67 9
Python与机器学习:使用Scikit-learn进行数据建模
DeepSeek服务器繁忙?拒绝稍后再试!基于阿里云PAI实现0代码一键部署DeepSeek-V3和DeepSeek-R1大模型
阿里云PAI平台支持零代码一键部署DeepSeek-V3和DeepSeek-R1大模型,用户可轻松实现从训练到部署再到推理的全流程。通过PAI Model Gallery,开发者只需简单几步即可完成模型部署,享受高效便捷的AI开发体验。具体步骤包括开通PAI服务、进入控制台选择模型、一键部署并获取调用信息。整个过程无需编写代码,极大简化了模型应用的门槛。
233 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
217 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等