scikit_learn學習筆記一——機器學習及Scikit learn簡要案例

機器學習 Scikit Learn

scikit learn website

Choosing the right estimator

  • Scikit-learn集成了很多機器學習需要使用的函數,Scikit-learn能簡潔、快速寫出機器學習程序

  • scikit-learn簡稱sklearn,支持包括分類、回歸、降維和聚類四大機器學習算法。還包含了特征提取、數據處理和模型評估三大模塊。


    scikit_learn.png
# 數據分割 訓練測試集
from sklearn.model_selection import train_test_split
# 數據處理 標準化
from sklearn.preprocessing import StandardScaler
# 分類模型性能評測報告
from sklearn.metrics import classification_report
# 特征轉換
from sklearn.feature_extraction import DictVectorizer
# 回歸模型評估
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error 

機器學習

機器學習是設計和研究能夠根據過去的經驗來為未來做決策的軟件,它是通過數據進行研究的程序。機器學習的基礎是歸納(generalize),就是從已知案例數據中找出未知的規律。

一般我們將機器學習的任務分為

  • 監督學習(Supervised Learning),關注對事物未知表現的預測,分類問題(Classification)和回歸(Regression)
  • 無監督學習(Unsupervised Learning),對事物本身特性的分析,聚類(Clustering)和數據降維(Dimensionality Reducting)
  • 增強學習(Reinforcement Learning),一個能感知環境的自治agent,怎樣通過學習選擇能達到其目標的最優動作。
  • 監督學習問題是,從成對的已經標記好的輸入和輸出經驗數據作為一個輸入進行學習,用來預測輸出結果,是從有正確答案的例子中學習。

    監督學習是通過一個輸入產生一個帶標簽的輸出的經驗數據對中進行學習。
    監督式機器學習任務就是分類 (classification)和回歸(regression)

    • 分類認為需要學會從若干變量約束條件中預測出目標變量的值,就是必須預測出新觀測值的類型,種類或標簽。
    • 回歸問題需要預測連續變量的數值,比如預測新產品的銷量,或者依據工作的描述預算工資水平等。
  • 無監督學習是程序不能從已經標記好的數據中學習。它需要在數據中發現一些規律。假如我們獲取了人的身高和體重數據,非監督學習的例子就是把數據點分成組別。

    無監督式機器學習任務是通過訓練數據發現相關觀測值的組別,稱為類(clusters)。主要方式是聚類(clustering),即通過一些相似性度量方法把一些觀測值分成同一類。數據的相似性
    降維(Dimensionality reduction)是另一個常見的無監督學習任務。有些問題可能包含成千上萬個解釋變量,處理起來非常麻煩。另外,有些解釋變量屬于噪音,也有些完全是無邊的變量,這些影響都會降低程序的歸納能力。降維是發現對響應變量影響最大的解釋變量的過程。降維可以更容易的實現數據可視化。對事物特性進行壓縮和篩選——數據壓縮降維

    • 聚類應用場景比如有一些影評數據,聚類算法可以分辨積極的和消極的影評。系統是不能給類加上“積極”或“消極”的標簽的;沒有監督,系統只能通過相似性度量方法把觀測值分成兩類。聚類分析的應用場景是用市場產品銷售數據為客戶分級。

監督學習與非監督學習可以看作機器學習的兩端。

  • 半監督學習,既包含監督數據也有非監督數據,這類問題可以看作是介于監督學習與非監督學習之間的學習。半監督機器學習案例是一種增強學習(Reinforcement Learning),問題可以通過決策來獲得反饋,但是反饋與某一個決策可能沒有直接關系。

  • 增強學習就是將情況映射為行為,也就是去最大化收益。學習者并不是被告知哪種行為將要執行,而是通過嘗試學習到最大增益的行為并付諸行動。也就是說增強學習關注的是智能體如何在環境中采取一系列行為,從而獲得最大的累積回報。通過增強學習,一個智能體應該知道在什么狀態下應該采取什么行為。RL是從環境狀態到動作的映射的學習,我們把這個映射稱為策略。

機器學習三要素:1.模型;2.策略;3.算法

  • 公式(方法) = 模型 + 策略 + 算法

模型、參數、目標函數

  • 模型 根據不同的業務或使用場景選擇合適的模型


    ml_select
  • 參數 模型的參數用來讓數據更好的適應結果

  • 目標函數也為代價函數,
    目標是讓代價(錯誤)最小

而如何找到最優解呢,這就需要使用代價函數來求解了:

目標函數的求解
引出了梯度下降:能夠找出cost function函數的最小值;
梯度下降原理:將函數比作一座山,我們站在某個山坡上,往四周看,從哪個方向向下走一小步,能夠下降的最快;

當然解決問題的方法有很多,梯度下降只是其中一個,還有一種方法叫Normal Equation;

方法:

  1. 先確定向下一步的步伐大小,我們稱為Learning rate
  2. 任意給定一個初始值
  3. 確定一個向下的方向,并向下走預先規定的步伐,并更新
  4. 當下降的高度小于某個定義的值,則停止下降

[機器學習算法地圖(下圖) 摘自"SIGAI"微信公眾號]


機器學習算法地圖.jpg

監督學習 分類——乳腺癌分類案例

監督學習 分類/回歸

即根據已有經驗知識對未知樣本的目標/標記進行預測

據目標預測變量的類型不同,分為分類回歸

流程順序:

  1. 獲取數據
  2. 抽取所需特征,形成特征向量(Feature Vectors)
  3. 特征向量+標簽數據(Labels)構成模型所需數據格式
  4. 數據分割成 訓練集,測試集,驗證集
  5. 模型訓練,評估驗證等

分類

  • 二分類(Binary Classification),即判斷是非
  • 多類分類(Multiclass Classification),多于兩個類別中選擇一個

線性分類器(Linear Classifiers)

假設特征與分類結果存在某種線性關系

f(w, x, b) = w^{T} + b

二分類之邏輯回歸(Logistic Regression)

也被稱為對數幾率回歸

邏輯回歸(Logistic Regression)是用于處理因變量為分類變量的回歸問題,常見的是二分類或二項分布問題,也可以處理多分類問題,它實際上是屬于一種分類方法。

g(z) = \frac{1}{1+e^{-z}} = g(f(w, x, b)) = \frac{1} {1+e^{-(w^{T}x+b)}}

  1. 讀取數據,查看數據情況 pandas
# 引入所需包
import numpy as np
import pandas as pd
# 使用sklearn.model_selection里的train_test_split模塊用于分割數據。得到 訓練/測試數據
# http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
from sklearn.model_selection import train_test_split


# 創建特征列表, 每列名稱
column_names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 
                'Uniformity of Cell Shape', 'Marginal Adhesion', 'Single Epithelial Cell Size', 
                'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class']

# 使用pandas.read_csv函數讀取指定數據
data = pd.read_csv('data/breast-cancer-wisconsin.csv', names = column_names)

# 將?替換為標準缺失值表示,缺失值處理
data = data.replace(to_replace='?', value=np.nan)

# 丟棄帶有缺失值的數據
data = data.dropna(how='any')

# 輸出data的數據量和維度。
print('數據維度為: {}'.format(data.shape))
image.png
  1. 查看數據具體內容情況


    image.png
  2. 將數據切分成 訓練集測試集

# 隨機采樣25%的數據用于測試,剩下的75%用于構建訓練集合
X_train, X_test, y_train, y_test = train_test_split(data[column_names[1:10]], data[column_names[10]], 
                                                    test_size=0.25, random_state=25)
# 查驗訓練樣本的數量和類別分布
y_train.value_counts()
image.png
  1. 用邏輯回歸進行二分類模型訓練及預測并作出性能評測
# 引入 線性分類 進行預測
# 數據先做 標準化處理
from sklearn.preprocessing import StandardScaler
# 引入 邏輯回歸 與 隨機梯度分類器
from sklearn.linear_model import LogisticRegression 
from sklearn.linear_model.stochastic_gradient import SGDClassifier
# 從sklearn.metrics里導入classification_report模塊。
from sklearn.metrics import classification_report

# 標準化數據,保證每個維度的特征數據方差為1,均值為0。使得預測結果不會被某些維度過大的特征值而主導。
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

# 實例化分類器
lr = LogisticRegression()
sgdc = SGDClassifier(max_iter=5, tol=None)

# 調用LogisticRegression中的fit函數/模塊用來訓練模型參數。
lr.fit(X_train, y_train)
# 使用訓練好的模型lr對X_test進行預測,結果儲存在變量lr_y_predict中。
lr_y_predict = lr.predict(X_test)

# 調用SGDClassifier中的fit函數/模塊用來訓練模型參數。
sgdc.fit(X_train, y_train)
# 使用訓練好的模型sgdc對X_test進行預測,結果儲存在變量sgdc_y_predict中。
sgdc_y_predict = sgdc.predict(X_test)

# 使用邏輯斯蒂回歸模型自帶的評分函數score獲得模型在測試集上的準確性結果。
print('Accuracy of LR Classifier:', lr.score(X_test, y_test))
# 利用classification_report模塊獲得LogisticRegression其他三個指標的結果。
print(classification_report(y_test, lr_y_predict, target_names=['Benign', 'Malignant']))

# 使用隨機梯度下降模型自帶的評分函數score獲得模型在測試集上的準確性結果。
print('Accuarcy of SGD Classifier:', sgdc.score(X_test, y_test))
# 利用classification_report模塊獲得SGDClassifier其他三個指標的結果。
print(classification_report(y_test, sgdc_y_predict, target_names=['Benign', 'Malignant']))
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375