訓練和測試模型:sklearn基本語句骆膝,pandas和numpy祭衩,train_test_split
評估指標:混淆矩陣,準確率阅签,精度掐暮,召回率,F1政钟,Fbeta路克,ROC曲線
回歸指標:絕對值,平方差养交,r2 score
模型選擇:交叉驗證精算,學習曲線,網格搜索
1 訓練和測試模型
1.1 統(tǒng)計學知識
居中趨勢測量:均值碎连、中值灰羽、眾數。
數據的離散性:四分位距法鱼辙、異常值廉嚼、標準偏差、貝塞爾修正(算樣本方差和樣本標準差時把n變?yōu)閚-1)倒戏。
1.2 pandas 和 numpy
import pandas as pd
import numpy as np
df = pd.read_csv('.csv')
np.array(df[["x","y"]])
Data frame and numpy簡介
https://juejin.im/post/5ad57db3f265da239c7bd9fb
https://zhuanlan.zhihu.com/p/27624814
1.3 sklearn 訓練模型
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
from sklearn.neural_network import MLPClassifier
classifier = MLPClassifier()
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
from sklearn.svm import SVC
classifier = SVC()
from sklearn.linear_model import
classifier.fit(X,y)
調整參數
classifier = SVC()
classifier.fit(X,y)
classifier = SVC(kernel = 'poly', degree = 2)
后面的課程會介紹自動調整參數
1.4 測試模型
通過分割訓練集和測試集前鹅,用測試集測試
Shall never use your testing data for training
2 評估指標
混淆矩陣
True或False代表預測的對錯,Postive或Negtive代表預測的方向
準確率 Accuracy
(TP + TN) / ALL
所有預測正確的/總數
from sklearn.metrics import accuracy_score
不適用于一些情況峭梳,比如預測信用卡欺詐,全部預測為沒問題,雖然準確率高葱椭,但是有問題
假陰性和假陽性
不同的案例使用不同的指標
醫(yī)療檢測是盡可能找到所有生病的人
垃圾郵件是找出的垃圾郵件捂寿,最好是垃圾郵件
精度 Precision
TP / (TP + FP)
所有預測為positive的點,有多少為真的positive孵运,使用TP做分子
適用于垃圾郵件檢測
召回率 Recall
所有真的positive的點秦陋,有多少被正確預測為positive
TP / (TP + TN)
適用于醫(yī)療模型
F1和F-beta
2/F1 = 1/Recall + 1/Precision
調和平均數總是小于算術平均數,調和平均數接近于更小的那個數
1/Fβ = N^2 / ((1+N^2) *recall) + 1 / ((1+N^2) *precision)
Fβ = (1+N^2) (precision * recall) / N^2 *precision + recall
如果 β=0, 則得出精度治笨。
如果 β=∞, 則得出召回率驳概。
對于 other values of β, 的其他值,如果接近 0旷赖,則得出接近精度的值顺又,如果很大,則得出接近召回率的值等孵,如果 β=1, 則得出精度和召回率的調和平均數
ROC曲線
兩個召回率坐標稚照,畫圖像,面積越接近1最好
ROC空間將偽陽性率(FPR)定義為 X 軸俯萌,真陽性率(TPR)定義為 Y 軸果录。
-
TPR:在所有實際為陽性的樣本中,被正確地判斷為陽性之比率咐熙。
-
FPR:在所有實際為陰性的樣本中弱恒,被錯誤地判斷為陽性之比率。
- 完美的就是從左到右為(1,1)到(0,0)
記住兩張圖棋恼,從(1,1)->(0,1)->(0,0)是完美分割的從左到右的經過(左為negative右為positive)
回歸指標
Mean absolute error
from sklearn.metrics import mean_absolute_error
from sklearn.linear_model import LInearRegression
classifier = LinearRegression()
classifier.fit(X, y)
guesses = classifier.predict(X)
error = mean_absolute_error(y, guesses)
缺點不能求導返弹,不好用梯度下降
Mean squared error
from sklearn.metrics import mean_squared_error
R2 score
Use R2 score = 1 - 實際的/過中心點的直線
from sklearn.metrics import r2_score
r2_score(y_true, y_pred)
R2接近1模型好,接近0模型差
3 模型選擇
錯誤類型
Underfitfing and overfitting交叉驗證
Model complexity graph訓練集用來訓練模型蘸泻,驗證集來選擇超參數以便減少像過擬合的問題
簡單交叉驗證把Training set 分為訓練集和交叉驗證集琉苇,test set不變
K折驗證交叉
目的是不浪費驗證集,把數據分為k份留一份為測試集悦施,剩余為交叉驗證集
訓練k次并扇,把結果的平均誤差選為最后的結果來判斷
from sklearn.model_selection import KFold
kf = KFold(12,3) #12 is size of data and 3 is the size of the testing set
kf = KFold(12,3,shuffle=True)
學習曲線
關于學習曲線的用法的介紹
https://deeplearning-ai.github.io/machine-learning-yearning-cn/docs/ch28/
https://zhuanlan.zhihu.com/p/33700459
https://www.jiqizhixin.com/articles/2018-01-23
檢測是否過擬合, 傳入一個數據集,然后cv分開成訓練集和驗證集抡诞,用訓練集的一部分用來訓練穷蛹,誤差為訓練誤差,驗證集計算前面訓練后的為驗證誤差昼汗。
這篇官方文檔寫的不錯:
Validation curve和Learning curve
http://sklearn.lzjqsdd.com/modules/learning_curve.html
每個預測模型都有它的優(yōu)缺點肴熏。大體上它的誤差由偏差(bias)、方差(variance)和噪聲(noise)組成顷窒。一個模型的 偏差 指其對于不同的訓練樣本集蛙吏,預測結果的平均誤差源哩。方差 指模型對于不同訓練樣本集的敏感程度。噪聲則是數據集本身的一項屬性鸦做。
偏差和方差是預測模型固有的屬性励烦,我們通常必須選擇合適的學習算法和超參數來盡可能同時降低它們(見 Bias-variance dilemma)。另一種降低方差的方式為使用更多的訓練數據泼诱。但只有當使用更低方差的模型仍然無法擬合過于復雜的函數時坛掠,你才應該著手去收集更多的訓練數據。
https://github.com/ZSMX/Udacity_Machine_Learning/tree/master/C2/LearningCurve
train_sizes, train_scores, test_scores = learning_curve(
estimator, X, y, cv=None, n_jobs=1, train_sizes=np.linspace(.1, 1.0, num_trainings))
隨著訓練點數的增加治筒,訓練誤差和交叉驗證集誤差 training error and CV error
好的模型兩個誤差相交與一點且比較低屉栓,可以查看是否過擬合
上面測量的是得分,翻轉一下就是誤差了耸袜,和上上面的圖對應:
網格搜索
訓練流程
用訓練集訓練parameters友多,然后用驗證集計算指標(比如F1 score)選擇超參數,最后用測試集判斷這個模型好不好
sklearn使用網格搜索
比如訓練SVM句灌,有以下超參數:
kernel:poly或rbf夷陋。
C:0.1,1 或 10。
https://github.com/ZSMX/Udacity_Machine_Learning/tree/master/C2/GridSearch
- 1 導入
from sklearn.model_selection import GridSearchCV - 2 選擇參數
parameters = {'kernel':['poly', 'rbf'],'C':[0.1, 1, 10]} - 3 建立評分機制
from sklearn.metrics import make_scorer
from sklearn.metrics import f1_score
scorer = make_scorer(f1_score) - 4 使用參數 (parameter) 和評分機制 (scorer) 創(chuàng)建一個 GridSearch 對象胰锌。 使用此對象與數據保持一致 (fit the data)
Create the object.
grid_obj = GridSearchCV(clf, parameters, scoring=scorer)
(class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, iid=’warn’, refit=True, cv=’warn’, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’, return_train_score=False)
cv default value if None will change from 3-fold to 5-fold in v0.22.)
Fit the data
grid_fit = grid_obj.fit(X, y) - 5 獲取最佳估算器(estimator)
best_clf = grid_fit.best_estimator_
4 項目
預測料理
https://github.com/ZSMX/Udacity_Machine_Learning/tree/master/C2/PredictYourCuisine
如何使用 scikit-learn 為機器學習準備文本數據
https://zhuanlan.zhihu.com/p/33779124
預測boston房價
https://github.com/ZSMX/Udacity_Machine_Learning/tree/master/C2/BostonHousingPrice