1. 程式人生 > 其它 >NOTE_PYTHON機器學習及實踐-從零開始通往KAGGLE競賽之路

NOTE_PYTHON機器學習及實踐-從零開始通往KAGGLE競賽之路

NOTE_PYTHON機器學習及實踐-從零開始通往KAGGLE競賽之路

作為筆記記錄閱讀,因為呼叫庫的更新,相對應的對程式碼也進行了更新。

1.機器學習綜述

  • 所謂具備“學習”能力的程式都是指它能夠不斷地從經歷和資料中吸取經驗教訓,從而應對未來的預測任務。我們習慣地把這種對未知的預測能力叫做泛化力(Generalization)
  • 機器學習具備不斷改善自身應對具體任務的能力->效能(Performance)

任務種類:

  1. 監督學習(Supervised Learning)
    • 關注事物對未知表現的預測
    • 分類問題(Classification)和迴歸問題(Regression)
  2. 無監督學習(Unsupervised Learning)
    • 傾向於對事物本身特性的分析
    • 資料降維(Dimensionality Reduction)和聚類問題(Clustering)

一些術語:

  1. 特徵(Feature):反映資料內在規律的資訊
  2. 特徵和標記/目標(Label/Target)
  3. 用一個特徵向量(Feature Vector)來描述一個數據樣本
  4. 標記/目標的表現形式則取決於監督學習的種類
  5. 把這種既有特徵,同時也帶有目標/標記的資料集稱作訓練集(Training Set),用來訓練我們的學習系統。

需要保證:出現在測試集中的資料樣本一定不能被用於模型訓練

2.用到的一些python庫

2.1 NumPy&Scipy

2.2 Matplotlib

2.3 Scikit-learn

2.4 Pandas

3. 監督學習經典模型

任務的基本架構和流程:

準備訓練資料->抽取所需要的特徵,形成特徵向量(Feature Vectors)->將特徵向量連同對應的標記/目標(Labels)一併送入學習演算法(Machine Learning Algorithm)->訓練出一個預測模型(Predictive Model)->採用同樣的特徵抽取方法作用於新測試資料,得到用於測試的特徵向量->使用預測模型對這些待測試的特徵向量進行預測並得到結果(Expected Label)

分類學習

  1. 二分類(Binary Classification)
  2. 多類分類(Multi-class Classification)
  3. 多標籤分類(Multi-label Classification)

線性分類器(Linear Classifiers)

一種假設特徵與分類結果存線上性關係的模型。通過累加計算每個維度的特徵與各自權重的乘積來幫助類別決策。

定義\(\bold{x}=<x_1,x_2,\cdots,x_n>\)來代表\(n\)維特徵列向量,同時用\(n\)維列向量\(\bold{w}=<w_1,w_2,\cdots,w_m>\)來代表對應的權重,或者係數(Coefficient);同時為了避免其過座標原點這種硬性假設,增加一個截距(Intercept)\(b\)。由此這種線性關係可以表達為\(f(\bold{w},\bold{x},b)=\bold{w}^\mathrm{T}\bold{x}+b\),這裡的\(f\in \mathbb{R}\),取值範圍分佈再整個實數域中。

所要處理的最簡單的二分類問題\(f\in \{0,1\}\);因此需要一個函式把原先的\(f\in \mathbb{R}\)對映到\((0,1)\)。使用Logistic函式:$$\Large g(z)=\frac{1}{1+e^{-x}}$$

可以觀察到該模型如何處理一個待分類的特徵向量:

​ 如果\(z=0\),那麼\(g=0.5\);若\(z<0\)\(g<0.5\),這個特徵向量被判為一類;反之,若\(z>0\),則\(z>0\),則\(g>0.5\),其被歸為另外一類。

綜上,如果將\(z\)替換為\(f\),整合可得:經典的線性分類器,Logistic Regression:

\(\Large h_{\bold{w},b}(\bold{x})=g(f(\bold{w},\bold{x},b))=\frac{1}{1+e^{-f}}=\frac{1}{1+e^{-(\bold{w}^\mathrm{T}\bold{x}+b)}}\)

由於原始資料沒有提供對應的測試樣本用於評估模型效能,因此需要對帶有標記的資料進行分割。通常情況下,25%的資料會作為測試集,其餘75%的資料用於訓練。

綜上,用於訓練樣本共有512條(344條良性腫瘤資料、168條惡性腫瘤資料),測試樣本有171條(100條良性腫瘤資料、71條惡性腫瘤資料)。

使用Logistic Regression和隨機梯度引數估計兩種方法對上述處理後的訓練資料進行學習,並且根據測試樣本特徵進行預測。

fit_transformtransform的區別:

  1. fit_transformfittransform的組合
  2. fit(x,y)傳兩個引數的是有監督學習的演算法,fit(x)傳一個引數的是無監督學習的演算法,比如降維、特徵提取、標準化。
  3. fittransform沒有任何關係,之所以出來這麼個函式名,僅僅是為了寫程式碼方便,所以會發現transform()fit_transform()的執行結果是一樣的。
  4. 注意:執行結果一模一樣不代表這兩個函式可以互相替換,絕對不可以!transform函式是一定可以替換為fit_transform函式的,fit_transform函式不能替換為transform函式!

引用地址:https://www.cnblogs.com/keye/p/8875128.html

line 9 warning:

​ x由於經過了StandardScaler(),導致其被轉化為了array格式,也就不存在feature names了。因此需要重新轉回dataFrame並和feature names匹配。

計算171條測試樣本中,預測正確的百分比。將這個百分比稱作準確性(Accuracy),並且將其作為評估分類模型的一個重要效能指標。

在二分類任務下,預測結果(Predicted Condition)正確標記(True Condition)之間存在4種不同的組合,構成混淆矩陣(Confusion Matrix)

四個指標:

\(\Large準確性 \mathrm{Accuracy}=\frac{\#(\mathrm{True\,Positive})+\#(\mathrm{True\,Negative})}{\#(\mathrm{True\,Positive})+\#(\mathrm{True\,Negative})+\#(\mathrm{False\,Positive})+\#(\mathrm{False\,Negative})}\)

\(\Large精確率 \mathrm{Precision}=\frac{\#(\mathrm{True\,Positive})}{\#(\mathrm{True\,Positive})+\#(\mathrm{False\,Positive})}\)

\(\Large召回率 \mathrm{Recall}=\frac{\#(\mathrm{True\,Positive})}{\#(\mathrm{True\,Positive})+\#(\mathrm{False\,Negative})}\)

\(\mathrm{F1\,measure}\)\(\mathrm{F1}\)指標綜合考量召回率與精確率

\(\Large \mathrm{F1\,measure}=\frac{2}{\frac{1}{\mathrm{Precision}}+\frac{1}{\mathrm{Recall}}}\)

​ 採用調和平均數,是因為它除了具備平均功能外,還會對那些召回率和精確率更加接近的模型給予更高的分數。

特點分析:

  • 線性分類器可以說是最為基本和常用的機器學習模型。儘管其受限於資料特徵與分類目標之間的線性假設,我們仍可以在科學研究與工程實踐中把線性分類器的表現效能作為基準。這裡所使用的模型包括Logistic Regression與SGD Classifier。
  • 相比之下,前者對引數的計算採用精確解析的方式,計算時間長但是模型效能略高;後者採用隨機梯度上升演算法估計模型引數,計算時間短但是產出的模型效能略高。一般而言,對於訓練資料規模在10萬量級以上的資料,考慮到時間的耗用,筆者更加推薦使用隨機梯度演算法對模型引數進行估計。

支援向量機(分類)

在之前“良/惡性腫瘤腫瘤預測”的例子中,曾經使用多個不同顏色的直線作為線性分類的邊界。同樣,如圖2-5所示的資料分類問題,我們更有無數種線性分類邊界可供選擇。

由於這些分類模型最終都是要應用在未知分佈的測試資料上,因此我們更加關注如何最大限度地為未知分佈地資料提供足夠地待預測空間

支援向量機分類器(Support Vector Classifier),便是根據訓練樣本地分佈,搜尋所有可能地線性分類器中最佳地那一個。根據圖片我們會發現決定其直線位置的樣本並不是所有的訓練資料,而是其中的兩個空間間隔最小的兩個不同類別的資料點

如果未知的待測資料也如訓練資料一樣分佈,那麼的確支援向量機可以幫助我們找到最佳的分類器。

指出:

  • 召回率、準確率和\(\mathrm{F1}\)指標最先適用於二分類任務;
  • 逐一評估某個類別的這三個效能:我們把所有其他的類別看做陰性(負)樣本,這樣一來就創造了10個二分類任務。