python調用scikit-learn機器學習


不支持深度學習和強化學習

numpy介紹:

np.eye(n)生成一個n維單元數組

數據預處理:

iris數據加載

from sklearn import datasets
iris = datasets.load_iris()

數據展示

顯示iris的信息

print(iris.data)
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
        ……
 [5.  3.6 1.4 0.2]
 [5.4 3.9 1.7 0.4]
 [4.6 3.4 1.4 0.3]]

每列數據表示不同樣本同一屬性下對用的數值

print(iris.feature_names)
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

輸出目標結果

print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

結果的含義

print(iris.target_names)
['setosa' 'versicolor' 'virginica']

確認數據類型

print(type(iris.data))
print(type(iris.target))

<class 'numpy.ndarray'>
<class 'numpy.ndarray'>

確認維度

print(iris.data.shape)

print(iris.target.shape)

(150, 4)
(150,)

X輸入數據賦值,y輸出數據賦值

X = iris.data
y = iris.target

模型訓練:

分類:根據數據集目標的特征或屬性,划分到已有的類別中

常用分類算法:KNN(K近鄰)、邏輯回歸、決策樹、朴素貝葉斯

KNN(最簡單的機器學習算法之一):

給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實例最鄰近的l個實例,這k個實例多數是什么類型就將該輸入實例分類到這個類中

模型調用

from sklearn.neighbors import KNeighborsClassifier

創建實例

knn=KNeighborsClassifier(n_neighbors=5)

模型訓練

模型訓練與預測

y_pred=knn.fit(X,y)
knn.predict(y_pred)

准確率

from sklearn.metrics import accuracy_score
print(accuracy_score(y,y_pred))

數據分離

from sklearn.model_selection import train_test_split

#訓練輸入數據,預測的輸入數據,訓練結果,預測結果
x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=0.4)

分離后數據集的訓練與評估

knn_5_s = KNeighborsClassifier(n_neighbors=5)
knn_5_s.fit(X_train, y_train)
y_train_pred=knn_5_s.predict(X_train)
y_test_pred=knn_5_s.predict(X_test)

確定k值

k_range=list(range(1,26))

score_train=[]
score_test=[]
for k in k_range:
knn=KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train,y_train)
y_train_pred=knn.predict(X_train)
y_test_pred=knn.predict(X_test)
score_train.append(accuracy_score(y_train,y_train_pred))
score_test.append(accuracy_score(y_test,y_test_pred))

圖形展示

import matplotlib.pyplot as plt
%matplotlib inline
#展示k值與訓練數據集預測准確率之間的關系
plt.plot(k_range,score_test)
plt.xlabel('K(KNN model)')
plt.ylabel('Training Accuracy')

 

 

  • 訓練數據集准確率 隨着模型復雜而提高
  • 測試數據集准確率 在模型過於簡單或復雜而准確率更低
  • KNN模型中,模型復雜度由K決定,(k越小,復雜度越高)

 

 對新數據進行預測

knn_11=KNeighborsClassifier(n_neighbors=11)
knn_11.fit(X_train,y_train)
knn_11.predict([[1,2,3,4]])

邏輯回歸模型:

用於解決分類問題的一種模型。根據數據特征或屬性,計算其歸屬於每一類別的概率P(x),根據概率數值判斷其所屬類別。主要應用場景:二分類問題。

P(x)=1/(1+e-(ax+b))    y={1,  P(x)≥0.5  0,P(x)<0.5

其中y為類別結果,P為概率,x為特征值,a、b為常量

(皮馬印第安人糖尿病數據集)

輸入變量:獨立變量包括患者的懷孕次數,葡萄糖量,血壓,皮褶厚度,體重指數,胰島素水平,糖尿病譜系功能,年齡

輸出結果:是否含義糖尿病

數據來源:Pima Indians Dianbetes dataset

 

預測准確率的局限性:

無法真實反映模型針對各個分類的預測准確度

准確率可以方便的用於衡量模型的整體預測效果,但無法反應細節信息,具體表現:

  • 沒有體現數據的實際分布情況
  • 沒有體現模型錯誤預測的類型

空准確率:當模型總是預測比例較高的類別,其預測准確率的數值

混淆矩陣(誤差矩陣):

用於衡量分類算法的准確程度

  • True Positives(TP):預測准確、實際為正樣本的數量(實際為1,預測為1)
  • True Negatives(TN):預測准確、實際為負樣本的數量(實際為0,預測為0)
  • False Positives(FP):預測錯誤、實際為負樣本的數量(實際為0,預測為1)
  • False Negatives(FN):預測錯誤、實際為正樣本的數量(實際為1,預測為0)
  公式 定義

准確率

(Accuracy)

 

整體樣本中,預測正確的比例

錯誤率

(Misclassification Rate)

整體樣本中,預測錯誤的比例

召回率

(Recall)

正樣本中,預測正確的比例

特異度

(Specificity)

  負樣本中,預測正確的比例

精確率

(Precision)

  預測結果為正樣本中,預測正確的比例

F1分數

(F1 Score)

  綜合Precision和Recall的判斷指標

混淆矩陣指標特點:

  • 分類任務中,相比單一的預測准確率,混淆矩陣提供了更全面的模型評估信息
  • 通過混淆矩陣,我們可以計算出多樣性的模型表現衡量指標,從而更好地選擇模型

哪個衡量指標更關鍵?

  • 衡量指標的選擇取決於應用場景
  • 垃圾郵件檢測(正樣本判斷為“垃圾郵件”):希望普通郵件(負樣本)不要被判斷為垃圾郵件(正樣本),需要關注精確率和召回率
  • 異常交易檢測(正樣本為“異常交易”):希望所有的異常交易都被檢測到,需要關注特異度

 

 

#數據預處理

import pandas as pd

path='csv文件路徑/xxx.csv'

pima=pd.read_csv(path)

#X,y賦值

feature_names=['pregnant','insulin','bmi','age']

X=pima[feature_names]

y=pima.label

#維度確認

print(X.shape,y.shape)

#數據分離

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)

#模型訓練

from sklearn.linear_model import LogisticRegression

logreg=LogisticRegression()

logreg.fit(X_train,y_train)

#測試數據集結果預測

y_pred=logreg.predict(X_test)

#使用准確率進行評估

from sklearn import metrics

print(metrics.accuracy_score(y_test,y_pred))

#確認正負樣本數據量

y_test.value_counts()

#1的比例

y_test.mean()

#0的比例

1-y_test.mean()

#空准確率

max(y_test.mean(),1-y_test.mean())

#四個因子賦值

cofusion=metrics.confusion_matrix(y_test,y_pred)

TN=confusion[0,0]

FP=confusion[0,1]

FN=confusion[1,0]

TP=confusion[1,1]

print(TN,FP,FN,TP)

/*指標計算參見上面的公式*/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM