UD機器學習 - C2 機器學習基礎

訓練和測試模型: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 測試模型

通過分割訓練集和測試集前鹅,用測試集測試

Use

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末骗绕,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子资昧,更是在濱河造成了極大的恐慌酬土,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件格带,死亡現場離奇詭異撤缴,居然都是意外死亡,警方通過查閱死者的電腦和手機叽唱,發(fā)現死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門屈呕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棺亭,你說我怎么就攤上這事虎眨。” “怎么了镶摘?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵嗽桩,是天一觀的道長。 經常有香客問我凄敢,道長碌冶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任涝缝,我火速辦了婚禮扑庞,結果婚禮上譬重,老公的妹妹穿的比我還像新娘。我一直安慰自己嫩挤,他們只是感情好害幅,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岂昭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狠怨。 梳的紋絲不亂的頭發(fā)上约啊,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音佣赖,去河邊找鬼恰矩。 笑死,一個胖子當著我的面吹牛憎蛤,可吹牛的內容都是我干的外傅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼俩檬,長吁一口氣:“原來是場噩夢啊……” “哼萎胰!你這毒婦竟也來了?” 一聲冷哼從身側響起棚辽,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤技竟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后屈藐,有當地人在樹林里發(fā)現了一具尸體榔组,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年联逻,在試婚紗的時候發(fā)現自己被綠了搓扯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡包归,死狀恐怖锨推,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情箫踩,我是刑警寧澤爱态,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站境钟,受9級特大地震影響锦担,放射性物質發(fā)生泄漏。R本人自食惡果不足惜慨削,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一洞渔、第九天 我趴在偏房一處隱蔽的房頂上張望套媚。 院中可真熱鬧,春花似錦磁椒、人聲如沸堤瘤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽本辐。三九已至,卻和暖如春医增,著一層夾襖步出監(jiān)牢的瞬間慎皱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工叶骨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茫多,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓忽刽,卻偏偏與公主長得像天揖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子跪帝,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容