引言
我们在之前的文章已经介绍了机器学习的一些基础概念,当拿到一个数据之后如何处理、如何评估一个模型、以及如何对模型调参等。接下来,我们正式开始学习如何实现机器学习的一些算法。 回归和分类是机器学习的两大最基本的问题,对于分类算法的详细理论部分。 本文主要从python代码的角度来实现分类算法。
python
复制代码
# 导入相关库
import sklearn
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
🌳1. 数据准备
下面我们以mnist
数据集为例进行演示,这是一组由美国人口普查局的高中生和雇员手写的70000个数字图像。每个图像都用数字表示。也是分类问题非常经典的一个数据集
python
复制代码
# 导入mnist数据集
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
mnist.keys()
css
复制代码
dict_keys(['data', 'target', 'frame', 'categories', 'feature_names', 'target_names', 'DESCR', 'details', 'url'])
其中data
是我们输入的特征,target
是0-9
的数字
python
复制代码
X, y = mnist["data"], mnist["target"]
X.shape,y.shape
scss
复制代码
((70000, 784), (70000,))
可以看出一共有70000图像,其中X一共有784个特征,这是因为图像是28×28
的,每个特征是0-255之间的。下面我们通过imshow()
函数将其进行还原
python
复制代码
%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()
从我们人类角度来看,我们很容易辨别它是5,我们要做的是,当给机器一张图片时,它能辨别出正确的数字吗?我们来看看y的值
python
复制代码
y[0]
arduino
复制代码
'5'
我们要实现的就是,给我们一张图片,不难发现这是一个多分类任务,下面我们正式进入模型建立,首先将数据集划分为训练集和测试集,这里简单的将前60000
个划分为训练集,后10000
个为测试集,具体代码如下
python
复制代码
y = y.astype(np.uint8)#将y转换成整数
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
🌴2.简单二元分类实现
在实现多分类任务之前,我们先从一个简单的问题考虑,现在假设我只想知道给我一张图片,它是否是7(我最喜欢的数字)。这个时候就是一个简单的二分类问题,首先我们要将我们的目标变量进行转变,具体代码如下
python
复制代码
y_train_7 = (y_train == 7)
y_test_7 = (y_test == 7)
现在,我们选择一个分类器并对其进行训练。我们先使用SGD(随机梯度下降)分类器
python
复制代码
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)
ini
复制代码
SGDClassifier(random_state=123)
训练好模型之后我们可以进行预测,以第一张图片为例,我们预测一下它是否是7(很显然我们知道不是)
python
复制代码
sgd_clf.predict(X[0].reshape((1,-1)))
scss
复制代码
array([False])
可以看出判断正确了,在之前我们讨论了模型评估的方法,详细介绍看这篇文章:Python机器学习从入门到高级:模型评估和选择(含详细代码) 下面演示如何用代码实现各个评估指标
🌵3.模型评估
我们根据分类评估指标来看看SGD
分类器效果
🌾3.1 准确率
python
复制代码
from sklearn.model_selection import cross_val_score
cross_val_score(sgd_clf, X_train, y_train_7, cv=3, scoring="accuracy")
scss
复制代码
array([0.97565, 0.97655, 0.963 ])
🌿3.2 混淆矩阵
python
复制代码
y_train_pred = sgd_clf.predict(X_train)
python
复制代码
from sklearn.metrics import confusion_matrix
confusion_matrix(y_train_7, y_train_pred)
lua
复制代码
array([[53304, 431],
[ 550, 5715]], dtype=int64)
☘️3.3 召回率和精确度
python
复制代码
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))
makefile
复制代码
precision: 0.929873088187439
recall: 0.9122106943335994
下面要用的matplotlib
,想了解matplotlib
可以看这篇文章:Python数据可视化大杀器之地阶技法:matplotlib(含详细代码)
🍁3.4 ROC曲线
python
复制代码
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)
这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!
CSDN大礼包:全网最全《全套Python学习资料》免费分享🎁
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
1️⃣零基础入门
① 学习路线
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
② 路线对应学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
③练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
因篇幅有限,仅展示部分资料
2️⃣国内外Python书籍、文档
① 文档和书籍资料
3️⃣Python工具包+项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
②Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
③Python小游戏源码
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
4️⃣Python面试题
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
5️⃣Python兼职渠道
而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓