机器学习算法基础--逻辑回归简单处理mnist数据集项目

目录

1.项目背景介绍

2.Mnist数据导入

3.数据标签提取且划分数据集

4.数据特征标准化

5.模型建立与训练

6.后验概率判断及预测

7.处理模型阈值及准确率

8.阈值分析的可视化绘图

9.模型精确性的评价标准

1.项目背景介绍

复制代码
"""
MNIST数据集是美国国家标准与技术研究院收集整理的大型手写数字数据集,包含了60,000个样本的训练集以及10,000个样本的测试集。
在这里我们给出个10000个数据集,以下我们就来简单地介绍以下这个数据集:
首先每一张mnist数据集图片都是由28x28的灰度值组成的,我们在excel中对于一张图片,采用一行784列才存储一张图片的灰度值。
所以我们10000个数据就有10000x784列数据所组成。

今天我们的任务就是通过逻辑回归做一个二分类的问题,给图片进行分类,划分成是否是5/或者其他的数据。

"""

2.Mnist数据导入

复制代码
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score
# 读取CSV文件
data = pd.read_csv('mnist-demo.csv')
data.head()#大部分的灰度值都为0

3.数据标签提取且划分数据集

python 复制代码
# 提取特征和标签
X = data.drop('label', axis=1).values
y = data['label']
y_binary = (y == 5).astype(int)

4.数据特征标准化

python 复制代码
# 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

5.模型建立与训练

python 复制代码
# 训练逻辑回归模型
model = LogisticRegression(max_iter=1000)
model.fit(X_train_scaled, y_train)

6.后验概率判断及预测

python 复制代码
# 预测概率
proba = model.predict_proba(X_test_scaled)
#根据后验概率进行决策差别还是比较大的
proba
%%
# 预测
predictions = model.predict(X_test_scaled)
#0表示不是5,1表示是5
predictions

7.处理模型阈值及准确率

python 复制代码
#阈值表示的是分类的决策面,如果prob>threhold,选择第一类,如果prob<=threhold,选择第二类
# 设置阈值
threshold_box=[0,0.05,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.95,1] 
Accuracy=np.zeros(13)
for i  in range(len(threshold_box)):
    threshold =threshold_box[i]
    predictions = (proba[:, 1] > threshold).astype(int)
    # 计算准确率
    Accuracy[i] = accuracy_score(y_test, predictions)
    print("阈值为{}时,模型的准确率为:{}".format(threshold,Accuracy[i]))

8.阈值分析的可视化绘图

python 复制代码
#matplotlib不支持中文,我们需要添加以下的代码
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

plt.scatter(threshold_box,Accuracy,color='r',label='Accuracy')
plt.ylim(0,1)
plt.title("不同阈值的准确率变化图")
plt.ylabel("模型分类准确率")
plt.xlabel("模型阈值")
plt.legend(loc=5,ncol=5,edgecolor='y')
plt.savefig(r"C:\Users\Zeng Zhong Yan\Desktop\不同阈值的准确率变化图.png",dpi=500)

9.模型精确性的评价标准

python 复制代码
我们给出以下的概念:
真阳性(True Positive,简称TP),也就是预测为真,实际上也为真的数据.
假阳性(False Positive,简称FP),也就是预测为真,但实际上为假的数据.
假阴性(False Negative,简称FN),也就是预测为假,但实际上为真的数据.
真阴性(True Negative,简称TN),也就是预计为假,实际上也为假的数据.

我们给出混淆矩阵的定义:
Confusion matrix=[[TP,FP],[FN,PN]]

我们同时给出几个评价指标:
1.准确率:所有的预测正确(正类负类)的占总的比重.
  Accuray=(TP+TN)/(TP+TN+FP+FN)
2.精确率:正确预测为正的占全部预测为正的比例.
  Precision=TP/(TP+FP)
3.召回率:即正确预测为正的占全部实际为正的比例.
  Recall=TP/(TP+FN)
4.F-score:
  F-score=(2*Precision*Recall)/(Precision+Recall)
相关推荐
-dzk-1 分钟前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
大山同学10 分钟前
图片补全-Context Encoder
人工智能·机器学习·计算机视觉
风筝在晴天搁浅11 分钟前
hot100 78.子集
java·算法
Jasmine_llq14 分钟前
《P4587 [FJOI2016] 神秘数》
算法·倍增思想·稀疏表(st 表)·前缀和数组(解决静态区间和查询·st表核心实现高效预处理和查询·预处理优化(提前计算所需信息·快速io提升大规模数据读写效率
超级大只老咪28 分钟前
快速进制转换
笔记·算法
m0_706653231 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你911 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
qq_423233901 小时前
C++与Python混合编程实战
开发语言·c++·算法
TracyCoder1231 小时前
LeetCode Hot100(19/100)——206. 反转链表
算法·leetcode
m0_715575341 小时前
分布式任务调度系统
开发语言·c++·算法