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


    目录

    1.项目背景介绍

    2.Mnist数据导入

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

    4.数据特征标准化

    5.模型建立与训练

    6.后验概率判断及预测

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

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

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

    1.项目背景介绍

    1. """
    2. MNIST数据集是美国国家标准与技术研究院收集整理的大型手写数字数据集,包含了60,000个样本的训练集以及10,000个样本的测试集。
    3. 在这里我们给出个10000个数据集,以下我们就来简单地介绍以下这个数据集:
    4. 首先每一张mnist数据集图片都是由28x28的灰度值组成的,我们在excel中对于一张图片,采用一行784列才存储一张图片的灰度值。
    5. 所以我们10000个数据就有10000x784列数据所组成。
    6. 今天我们的任务就是通过逻辑回归做一个二分类的问题,给图片进行分类,划分成是否是5/或者其他的数据。
    7. """

    2.Mnist数据导入

    1. import pandas as pd
    2. import numpy as np
    3. from sklearn.model_selection import train_test_split
    4. from sklearn.linear_model import LogisticRegression
    5. from sklearn.preprocessing import StandardScaler
    6. import matplotlib.pyplot as plt
    7. from sklearn.metrics import accuracy_score
    8. # 读取CSV文件
    9. data = pd.read_csv('mnist-demo.csv')
    10. data.head()#大部分的灰度值都为0

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

    1. # 提取特征和标签
    2. X = data.drop('label', axis=1).values
    3. y = data['label']
    4. y_binary = (y == 5).astype(int)

    4.数据特征标准化

    1. # 特征标准化
    2. scaler = StandardScaler()
    3. X_train_scaled = scaler.fit_transform(X_train)
    4. X_test_scaled = scaler.transform(X_test)

    5.模型建立与训练

    1. # 训练逻辑回归模型
    2. model = LogisticRegression(max_iter=1000)
    3. model.fit(X_train_scaled, y_train)

    6.后验概率判断及预测

    1. # 预测概率
    2. proba = model.predict_proba(X_test_scaled)
    3. #根据后验概率进行决策差别还是比较大的
    4. proba
    5. %%
    6. # 预测
    7. predictions = model.predict(X_test_scaled)
    8. #0表示不是5,1表示是5
    9. predictions

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

    1. #阈值表示的是分类的决策面,如果prob>threhold,选择第一类,如果prob<=threhold,选择第二类
    2. # 设置阈值
    3. 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]
    4. Accuracy=np.zeros(13)
    5. for i in range(len(threshold_box)):
    6. threshold =threshold_box[i]
    7. predictions = (proba[:, 1] > threshold).astype(int)
    8. # 计算准确率
    9. Accuracy[i] = accuracy_score(y_test, predictions)
    10. print("阈值为{}时,模型的准确率为:{}".format(threshold,Accuracy[i]))

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

    1. #matplotlib不支持中文,我们需要添加以下的代码
    2. # 支持中文
    3. plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    4. plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
    5. plt.scatter(threshold_box,Accuracy,color='r',label='Accuracy')
    6. plt.ylim(0,1)
    7. plt.title("不同阈值的准确率变化图")
    8. plt.ylabel("模型分类准确率")
    9. plt.xlabel("模型阈值")
    10. plt.legend(loc=5,ncol=5,edgecolor='y')
    11. plt.savefig(r"C:\Users\Zeng Zhong Yan\Desktop\不同阈值的准确率变化图.png",dpi=500)

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

    1. 我们给出以下的概念:
    2. 真阳性(True Positive,简称TP),也就是预测为真,实际上也为真的数据.
    3. 假阳性(False Positive,简称FP),也就是预测为真,但实际上为假的数据.
    4. 假阴性(False Negative,简称FN),也就是预测为假,但实际上为真的数据.
    5. 真阴性(True Negative,简称TN),也就是预计为假,实际上也为假的数据.
    6. 我们给出混淆矩阵的定义:
    7. Confusion matrix=[[TP,FP],[FN,PN]]
    8. 我们同时给出几个评价指标:
    9. 1.准确率:所有的预测正确(正类负类)的占总的比重.
    10. Accuray=(TP+TN)/(TP+TN+FP+FN)
    11. 2.精确率:正确预测为正的占全部预测为正的比例.
    12. Precision=TP/(TP+FP)
    13. 3.召回率:即正确预测为正的占全部实际为正的比例.
    14. Recall=TP/(TP+FN)
    15. 4.F-score:
    16. F-score=(2*Precision*Recall)/(Precision+Recall)

  • 相关阅读:
    Linux命令_find
    Go 企业级框架 Beego 版全新发布
    从方法到目标了解什么是机器学习?
    git常用命令
    c++提高篇——模板
    MutationObserver对象
    Selenium Grid 的搭建方法
    基于slate构建文档编辑器
    Spring Cloud Alibaba-OpenFign实现服务调用
    深入理解强化学习——多臂赌博机:梯度赌博机算法的基础知识
  • 原文地址:https://blog.csdn.net/m0_71819746/article/details/133046729