目錄
1.項(xiàng)目背景介紹
2.Mnist數(shù)據(jù)導(dǎo)入
3.數(shù)據(jù)標(biāo)簽提取且劃分?jǐn)?shù)據(jù)集
4.數(shù)據(jù)特征標(biāo)準(zhǔn)化
5.模型建立與訓(xùn)練
6.后驗(yàn)概率判斷及預(yù)測(cè)
7.處理模型閾值及準(zhǔn)確率
8.閾值分析的可視化繪圖
9.模型精確性的評(píng)價(jià)標(biāo)準(zhǔn)
1.項(xiàng)目背景介紹
"""
MNIST數(shù)據(jù)集是美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院收集整理的大型手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集,包含了60,000個(gè)樣本的訓(xùn)練集以及10,000個(gè)樣本的測(cè)試集。
在這里我們給出個(gè)10000個(gè)數(shù)據(jù)集,以下我們就來(lái)簡(jiǎn)單地介紹以下這個(gè)數(shù)據(jù)集:
首先每一張mnist數(shù)據(jù)集圖片都是由28x28的灰度值組成的,我們?cè)趀xcel中對(duì)于一張圖片,采用一行784列才存儲(chǔ)一張圖片的灰度值。
所以我們10000個(gè)數(shù)據(jù)就有10000x784列數(shù)據(jù)所組成。
今天我們的任務(wù)就是通過(guò)邏輯回歸做一個(gè)二分類的問(wèn)題,給圖片進(jìn)行分類,劃分成是否是5/或者其他的數(shù)據(jù)。
"""
2.Mnist數(shù)據(jù)導(dǎo)入
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.數(shù)據(jù)標(biāo)簽提取且劃分?jǐn)?shù)據(jù)集
# 提取特征和標(biāo)簽
X = data.drop('label', axis=1).values
y = data['label']
y_binary = (y == 5).astype(int)
4.數(shù)據(jù)特征標(biāo)準(zhǔn)化
# 特征標(biāo)準(zhǔn)化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
5.模型建立與訓(xùn)練
# 訓(xùn)練邏輯回歸模型
model = LogisticRegression(max_iter=1000)
model.fit(X_train_scaled, y_train)
6.后驗(yàn)概率判斷及預(yù)測(cè)
# 預(yù)測(cè)概率
proba = model.predict_proba(X_test_scaled)
#根據(jù)后驗(yàn)概率進(jìn)行決策差別還是比較大的
proba
%%
# 預(yù)測(cè)
predictions = model.predict(X_test_scaled)
#0表示不是5,1表示是5
predictions
7.處理模型閾值及準(zhǔn)確率
#閾值表示的是分類的決策面,如果prob>threhold,選擇第一類,如果prob<=threhold,選擇第二類
# 設(shè)置閾值
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)
# 計(jì)算準(zhǔn)確率
Accuracy[i] = accuracy_score(y_test, predictions)
print("閾值為{}時(shí),模型的準(zhǔn)確率為:{}".format(threshold,Accuracy[i]))
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-731095.html
8.閾值分析的可視化繪圖
#matplotlib不支持中文,我們需要添加以下的代碼
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來(lái)正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False # 用來(lái)正常顯示負(fù)號(hào)
plt.scatter(threshold_box,Accuracy,color='r',label='Accuracy')
plt.ylim(0,1)
plt.title("不同閾值的準(zhǔn)確率變化圖")
plt.ylabel("模型分類準(zhǔn)確率")
plt.xlabel("模型閾值")
plt.legend(loc=5,ncol=5,edgecolor='y')
plt.savefig(r"C:\Users\Zeng Zhong Yan\Desktop\不同閾值的準(zhǔn)確率變化圖.png",dpi=500)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-731095.html
9.模型精確性的評(píng)價(jià)標(biāo)準(zhǔn)
我們給出以下的概念:
真陽(yáng)性(True Positive,簡(jiǎn)稱TP),也就是預(yù)測(cè)為真,實(shí)際上也為真的數(shù)據(jù).
假陽(yáng)性(False Positive,簡(jiǎn)稱FP),也就是預(yù)測(cè)為真,但實(shí)際上為假的數(shù)據(jù).
假陰性(False Negative,簡(jiǎn)稱FN),也就是預(yù)測(cè)為假,但實(shí)際上為真的數(shù)據(jù).
真陰性(True Negative,簡(jiǎn)稱TN),也就是預(yù)計(jì)為假,實(shí)際上也為假的數(shù)據(jù).
我們給出混淆矩陣的定義:
Confusion matrix=[[TP,FP],[FN,PN]]
我們同時(shí)給出幾個(gè)評(píng)價(jià)指標(biāo):
1.準(zhǔn)確率:所有的預(yù)測(cè)正確(正類負(fù)類)的占總的比重.
Accuray=(TP+TN)/(TP+TN+FP+FN)
2.精確率:正確預(yù)測(cè)為正的占全部預(yù)測(cè)為正的比例.
Precision=TP/(TP+FP)
3.召回率:即正確預(yù)測(cè)為正的占全部實(shí)際為正的比例.
Recall=TP/(TP+FN)
4.F-score:
F-score=(2*Precision*Recall)/(Precision+Recall)
到了這里,關(guān)于機(jī)器學(xué)習(xí)算法基礎(chǔ)--邏輯回歸簡(jiǎn)單處理mnist數(shù)據(jù)集項(xiàng)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!