scikit-learn/logistic regression识别mnist

本文介绍了利用scikit-learn的逻辑回归模型对MNIST手写数字数据集进行识别的过程。通过逻辑回归的对数似然损失函数进行训练,并在测试集上达到90%的识别准确率。文章还讨论了逻辑回归在二分类与多分类问题中的应用,指出当类别互斥时应选择softmax回归。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逻辑回归的对数似然损失函数cost function:
这里写图片描述
当y=1时,假定这个样本为正类。如果此时hθ(x)=1,则单对这个样本而言的cost=0,表示这个样本的预测完全准确。那如果所有样本都预测准确,总的cost=0
但是如果此时预测的概率hθ(x)=0,那么cost趋向于无穷大,那么此时就要对损失函数加一个很大的惩罚项。
logistic cost定义为:
这里写图片描述

logistic回归主要是对二分类问题进行分类,如果要用这个算法对多分类问题进行分类,就需要建立相应变量,将多分类问题处理成多个二分类问题,再进行分类。softmax回归可以直接解决多分类问题,对于类别从1到k的问题,可以判别样本属于哪个类。
分类原则:
如果多个类别中,各个类别是可以相互包含的则使用logistic回归,如果是互斥的则使用softmax回归

使用logistic regression 识别mnist

#coding:utf-8
"""
python 3
sklearn 0.18
"""
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
在使用scikit-learn软件包对mnist数据集进行分类之前,我们首先需要导入相关的库和数据集。 ```python from sklearn.datasets import fetch_openml from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.svm import SVC from sklearn.naive_bayes import GaussianNB from sklearn.linear_model import LogisticRegression import matplotlib.pyplot as plt # 导入mnist数据集 X, y = fetch_openml('mnist_784', version=1, return_X_y=True) ``` 接下来,我们将数据集分为训练集和测试集,其中80%的数据用于训练模型,20%的数据用于评估模型的准确性。 ```python # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` 接下来,我们使用不同的分类器对mnist数据集进行分类,并对结果进行可视化。 1. K近邻算法(K-Nearest Neighbors): ```python knn = KNeighborsClassifier() knn.fit(X_train, y_train) accuracy = knn.score(X_test, y_test) print("K近邻算法准确率:", accuracy) ``` 2. 决策树算法(Decision Tree): ```python tree = DecisionTreeClassifier() tree.fit(X_train, y_train) accuracy = tree.score(X_test, y_test) print("决策树算法准确率:", accuracy) ``` 3. 支持向量机算法(Support Vector Machine): ```python svm = SVC() svm.fit(X_train, y_train) accuracy = svm.score(X_test, y_test) print("支持向量机算法准确率:", accuracy) ``` 4. 朴素贝叶斯算法(Naive Bayes): ```python nb = GaussianNB() nb.fit(X_train, y_train) accuracy = nb.score(X_test, y_test) print("朴素贝叶斯算法准确率:", accuracy) ``` 5. 逻辑回归算法(Logistic Regression): ```python lr = LogisticRegression() lr.fit(X_train, y_train) accuracy = lr.score(X_test, y_test) print("逻辑回归算法准确率:", accuracy) ``` 最后,我们可以使用Matplotlib库将测试集中的一些样本可视化,以便更直观地观察分类结果。 ```python # 随机选择测试集中的一些样本进行可视化 random_indices = np.random.choice(range(len(X_test)), size=36, replace=False) selected_images = X_test[random_indices] selected_labels = y_test[random_indices] # 创建子图,并在每个子图上显示样本的图像和标签 n_rows = 6 n_cols = 6 fig, axes = plt.subplots(n_rows, n_cols, figsize=(10, 10)) for i, ax in enumerate(axes.flatten()): image = selected_images[i].reshape(28, 28) ax.imshow(image, cmap='gray') ax.axis('off') ax.set_title(f"Label: {selected_labels[i]}") plt.tight_layout() plt.show() ``` 以上就是基于scikit-learn软件包对mnist数据集进行分类,并可视化的过程,其中尝试了K近邻算法、决策树算法、支持向量机算法、朴素贝叶斯算法和逻辑回归算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值