不能錯過!初學者三種類型機器學習必看指南

2021-01-10 讀芯術

全文共5835字,預計學習時長16分鐘

用Yellowbrick可視化KMeans

機器學習問題一般可以分為三種類型,包括被稱為監督學習的分類和回歸,和無監督學習,無監督學習在機器學習中通常是指聚類。

本文將簡要介紹這三個問題,並在流行的python庫scikit-learn中演練。

在開始之前,先簡要解釋監督和無監督學習術語的含義。

監督學習:在監督學習中,有一組已知的輸入(特徵)和一組已知的輸出(標籤)。一般把輸入特徵和輸出標籤叫做X和y。該算法的目標是學習將輸入映射到輸出的映射函數。從而當給出新的X示例時,該機器可以正確地預測相應的y標籤。

無監督學習:在無監督的學習中,只有一組輸入(X),沒有對應的標籤(y)。該算法的目的是在數據中找到之前未發現的規律。這些算法常常被用來尋找X的類似樣本的有意義的聚類,因此實際上可以找到數據的內在類別。

圖源:pexels

1. 分類

在分類中,輸出(y)是類別。類別可以只有兩種,比如說可以把郵件分成垃圾郵件和非垃圾郵件。類別也可以有很多種,例如對花的種類進行分類,這被稱為多類分類。

接下來用scikit-learn來舉一個關於分類的簡單例子。如果您尚未安裝scikit-learn,可以通過pip或conda安裝。

Scikit-learn有許多可以通過庫直接訪問的數據集。在本文中為了方便,整個過程中使用的數據集都是這些示例數據集。下面使用屬於多類分類的葡萄酒數據集來說明分類問題。在數據集中,輸入(X)包含13個與每種葡萄酒類型的各種屬性相關的特徵。已知的輸出(y)是數據集中已經給出的用數字0,1或2代表的葡萄酒類型。

本文中使用的所有代碼的導入如下所示。

import pandas as pd

import numpy as npfrom sklearn.datasets import load_wine

from sklearn.datasets import load_bostonfrom sklearn.model_selection importtrain_test_split

from sklearn import preprocessingfrom sklearn.metrics import f1_score

from sklearn.metrics import mean_squared_error

from math import sqrtfrom sklearn.neighbors import KNeighborsClassifier

from sklearn.svm import SVC, LinearSVC, NuSVC

from sklearn.tree import DecisionTreeClassifier

from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier,GradientBoostingClassifier

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis

from sklearn import linear_model

from sklearn.linear_model import ElasticNetCV

from sklearn.svm import SVRfrom sklearn.cluster import KMeans

from yellowbrick.cluster import KElbowVisualizer

from yellowbrick.cluster import SilhouetteVisualizer

在下面的代碼中,下載數據然後把它轉換為pandas數據幀。

wine = load_wine()

wine_df = pd.DataFrame(wine.data, columns=wine.feature_names)

wine_df['TARGET'] = pd.Series(wine.target)

監督學習問題中的下一個步驟是將數據拆分為測試集和訓練集。算法可以使用訓練集來學習輸入和輸出之間的映射,然後使用保留的測試集來評估模型是否學會了這種映射。在下面的代碼中,使用scikit-learnmodel_selection函數train_test_split來執行此操作。

X_w = wine_df.drop(['TARGET'],axis=1)

y_w = wine_df['TARGET']

X_train_w, X_test_w, y_train_w, y_test_w = train_test_split(X_w, y_w,test_size=0.2)

在下一步中,需要選擇最適合學習所選數據集中映射的算法。在scikit-learn有許多不同的算法可供選擇,這些算法使用不同的函數和方法來學習映射,可以在這裡查看完整列表。

運行以下代碼來找出最好的模型。使用一系列算法訓練模型,並獲得每個算法的F1分數。F1分數是衡量分類器整體精度的良好指標。這裡詳細地寫了可以用來評估分類器的各種指標。

classifiers = [

KNeighborsClassifier(3),

SVC(kernel="rbf", C=0.025,probability=True),

NuSVC(probability=True),

DecisionTreeClassifier(),

RandomForestClassifier(),

AdaBoostClassifier(),

GradientBoostingClassifier()

]

for classifier in classifiers:

model = classifier

model.fit(X_train_w, y_train_w)

y_pred_w = model.predict(X_test_w)

print(classifier)

print("model score:%.3f" %f1_score(y_test_w, y_pred_w, average='weighted'))

表示完美的F1得分是1.0,因此,數字越接近1.0,模型性能就越好。上述結果表明,隨機森林分類器(Random Forest Classifier)是此數據集的最佳模型。

2. 回歸

在回歸中,輸出(y)是連續的值,而不是類別。回歸的典型例子是預測商店下個月的銷售額,或者是預測您的房子的未來房價。

為了再次說明回歸,下面將使用scikit-learn稱為波士頓住房數據集的數據集。這個數據集包括13個特徵(X),這些特徵包含房屋的各種屬性,例如房間數量,地點,建築年齡和當地犯罪率。輸出(y)是房價。

使用下面的代碼處理數據,並使用在wine數據集中用的相同方法將其拆分為測試和訓練集。

boston_df =pd.DataFrame(boston.data, columns=boston.feature_names)

boston_df['TARGET'] = pd.Series(boston.target)X_b = boston_df.drop(['TARGET'],axis=1)

y_b = boston_df['TARGET']

X_train_b, X_test_b, y_train_b, y_test_b = train_test_split(X_b, y_b,test_size=0.2)

可以使用這個速查表來查看適用於scikit-learn中回歸問題的可用算法。接下來將使用類似於分類問題的代碼來循環選擇並打出每個分數。

評估回歸模型有許多不同的指標。這些指標本質上都是誤差度量,用來測量由模型實現的實際值和預測值之間的差異。這裡使用了根均值平方誤差(RMSE)。對於此度量,越接近零值則模型的性能越好。本文非常好地解釋了回歸問題的誤差度量。

regressors = [

linear_model.Lasso(alpha=0.1),

linear_model.LinearRegression(),

ElasticNetCV(alphas=None,copy_X=True, cv=5, eps=0.001, fit_intercept=True,

l1_ratio=0.5, max_iter=1000,n_alphas=100, n_jobs=None,

normalize=False, positive=False,precompute='auto', random_state=0,

selection='cyclic', tol=0.0001,verbose=0),

SVR(C=1.0, cache_size=200, coef0=0.0,degree=3, epsilon=0.1,

gamma='auto_deprecated',kernel='rbf', max_iter=-1, shrinking=True,

tol=0.001, verbose=False),

linear_model.Ridge(alpha=.5)

]for regressor in regressors:

model = regressor

model.fit(X_train_b, y_train_b)

y_pred_b = model.predict(X_test_b)

print(regressor)

print("mean squarederror:%.3f" % sqrt(mean_squared_error(y_test_b, y_pred_b)))

RMSE評分表明線性回歸和嶺回歸算法在此數據集中表現性能最佳。

3. 無監督學習

有許多不同類型的無監督學習,但為了簡單起見,下文將重點關注聚類方法。有許多不同的聚類算法,這些算法查找輸入集群的技術都略有不同。

使用最多的方法之一可能是K-means。該算法執行一個迭代過程,從而啟動指定數量的隨機生成裝置。它計算從質心到每個數據點的距離度量,或者說歐氏距離,從而創建有類似值的聚類。每個集群的質心然後成為新的平均值,重複這個過程來找到最佳結果。

接下來使用在分類任務中用過的葡萄酒數據集,去掉y標籤,看看k均值算法是否可以通過輸入識別葡萄酒類型。

因為我們只使用這個模型的輸入,所以我使用稍微不同的方法將數據分解為測試和訓練集。

np.random.seed(0)

msk = np.random.rand(len(X_w)) < 0.8

train_w = X_w[msk]

test_w = X_w[~msk]

由於-Kmeans依賴於距離度量來確定集群,因此在訓練模型之前通常需要執行特徵縮放,確保所有特徵都是相同的大小。下面的代碼使用MinMaxScaler來縮放特徵,確保所有值都在0和1之間。

x = train_w.values

min_max_scaler = preprocessing.MinMaxScaler()

x_scaled = min_max_scaler.fit_transform(x)

X_scaled = pd.DataFrame(x_scaled,columns=train_w.columns)

使用K-means必須指定算法應該使用的集群數量。因此,首先要做的事情之一是確定聚類的最佳數量。這是通過迭代多個k值並在圖表上繪製結果來實現的。這被稱為肘部方法,因為它通常會生成一個看起來有點像肘部的曲線。Yellowbrick庫有一個對於可視化來說非常好的功能。下面的代碼生成此可視化圖像。(註:Yellowbrick庫是一個很好的可視化scikit-learn模型的庫,還可以通過pip安裝)

model = KMeans()

visualizer = KElbowVisualizer(model, k=(1,8))

visualizer.fit(X_scaled)

visualizer.show()

通常在數據集中使用聚類技術的類別有多少是未知的。但在此處,已知的是數據中有三種葡萄酒類型-曲線已經正確選擇了三種葡萄酒作為模型中使用的最佳集群數量。

下一步是初始化K均值算法,並將模型與訓練數據進行擬合,並評估算法對數據進行聚類的有效性。

這裡的一種方法叫做輪廓得分(SilhouetteCoefficient)。這個方法測量集群內值的一致性。換句話說,它測量每個集群中的值彼此的相似程度,以及集群之間的差異程度。為每個值計算輪廓分數,分數的範圍是-1到+1。這些值繪製成輪廓圖。同樣,yellowbrick提供了一種簡單的方法來構建這種輪廓圖。以下代碼用wine數據集生成了此可視化圖。

model = KMeans(3, random_state=42)

visualizer = SilhouetteVisualizer(model,colors='yellowbrick')visualizer.fit(X_scaled)

visualizer.show()

可以通過以下方式解釋剪影圖:

· 平均得分(上面的紅色虛線)越接近+1,則數據點在聚類中匹配得越好。

· 得分為0的數據點非常接近另一個聚類的決策邊界(因此差異度較低)。

· 負值表示數據點可能在錯誤的集群。

· 每個庫的寬度應該是合理均勻的,如果不是這樣的話,那麼使用的可能是錯誤的k值。

上面的葡萄酒數據集的圖表顯示,由於大多數數據點低於平均得分,並且部分數據點低於0,因此集群0可能不如其他集群一致性高。

輪廓分數在比較不同的算法或k值時尤其有用。

這篇文章簡要介紹了三種機器學習類型。所有這些過程還涉及許多其他步驟,包括特徵工程,數據處理和超參數優化,以確定最佳的數據預處理技術和最佳使用模型。

感謝閱讀!

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 人工智慧的意義,機器學習的三種類型
    人工智慧的意義,機器學習的三種類型 隨銳科技 發表於 2020-11-30 09:32:21   據麥肯錫全球研究院的研究,截至2030年,人工智慧每年將額外創造13
  • 機器學習初學者必須知道的十大算法
    還在為不知道學什麼算法入門機器學習感到頭疼?本文作者通過自身的學習向初學者介紹十大機器學習(ML)算法,並附有數字和實例以便於理解。哈佛商業評論稱數據科學家是21世紀最性感的工作。所以,對於那些ML剛剛開始的人來說,這篇博客機器學習算法工程師需要知道的十大算法是非常有用的。ML算法是可以從數據中學習並從中改進的算法,無需人工幹預。
  • 入門| 機器學習新手必看10大算法
    原標題:入門 | 機器學習新手必看10大算法 選自TowardsDataScience 作者:James Le 在機器學習中,有一種叫做「沒有免費的午餐」的定理。簡而言之,它指出沒有任何一種算法對所有問題都有效,在監督學習(即預測建模)中尤其如此。 例如,你不能說神經網絡總是比決策樹好,反之亦然。有很多因素在起作用,例如數據集的大小和結構。
  • 新手必看的十種機器學習算法
    ,開始嘗試用某些機器學習方法自動解決可以輕鬆採集數據的問題。然而,在眾多的機器學習算法中,哪些是又上手快捷又功能強大、適合新手學習的呢?Towards Data Science 上一篇文章就介紹了十種新手必看的機器學習算法,雷鋒網 AI 科技評論全文編譯如下。
  • 0基礎素描初學者學習素描中不容錯過的12大素描技巧
    畫的靜物素描是每個美術生不可缺少的技能,但是靜物素描不能很好地描繪出來時真的很奇怪。那麼,是否有能夠在短時間內快速提高草圖靜物素描能力的技術?3)是視覺中心的焦點突出;黑、白、灰的層次清晰4.中心焦點是一幅素描作品的視覺指南
  • 教程| 初學者如何選擇合適的機器學習算法(附速查表)
    選自sas機器之心編譯參與:黃小天、蔣思源、吳攀本文主要的目標讀者是機器學習愛好者或數據科學的初學者,以及對學習和應用機器學習算法解決實際問題抱有濃厚興趣的讀者。面對大量的機器學習算法,初學者通常會問自己一個典型的問題:「我該使用哪一種算法?」
  • 零極限初學者,輕鬆學清理的4本經典入門書
    今天,就給大家推薦4本零極限實踐者必看的經典入門好書。相信看過這幾本書後,你能夠真正理解什麼是清理,以及如何清理,從而輕鬆地持續踐行零極限。《尤尼希皮裡》《零極限的美好生活》《零極限療愈日記》▽▽▽這本修·藍博士與喬·維泰利博士合著的《零極限》,是零極限最經典也是全球傳播最廣,初學者必看
  • 谷歌今日上線基於TensorFlow的機器學習速成課程
    隨著機器學習越來越受到公眾的關注,很多初學者希望能快速了解機器學習及前沿技術。而今天谷歌上線了基於 TensorFlow 的機器學習速成課程,它包含 40 多項練習、25 節課程以及 15 個小時的緊湊學習內容。
  • 55歲-70歲是壽命關鍵期,最怕這三種病!這份健康指南,送你收藏!
    其實,60歲以後是壽命關鍵期;過了60歲,最怕三種病!怎麼做才能防病、保健康、延年益壽呢?這裡有一份特製的健康指南,年過60必看! 「 60歲後是壽命關鍵期,最怕三種病。
  • 微軟再推免費在線 Python 教程,面向數據科學和機器學習初學者
    去年九月,微軟曾面向 Python 初學者,推出了一套免費的教程視頻。從基本介紹和 VS Code 的配置講起,循序漸進語法概念等基礎內容講解。目前為止,該系列視頻播放量已達到將近 180 萬次。近日,微軟在此基礎上,再度更新兩個針對 Python 初學者的系列教程,作為對之前教程的補充,或者說是進階。因此,這兩個新的系列面向的不完全是純粹的 Python 新手,而是對 Python 稍有了解,並可能有其他語言的編碼經驗的人。
  • 2018後必看的幾部科幻電影,不能錯過的影片,有哪些是你看過的呢
    2018必看的幾部科幻電影,不能錯過的影片,有哪些是你看過的呢《頭號玩家》本來沒覺得有什麼,小夥伴叫我去的,但是真正開始以後妥妥路轉粉!薑還是老的辣!再回到個人,即使表面吊兒郎當,內心還是有著強大的力量,不是不能做而是不想,同理你能力越強選擇越多,但同時也承擔得更多。褪去光環,他們也是個普通人,只是當災難來臨別無選擇的時候,能激發出自己的潛力去擺平。
  • 教你學Python40-機器學習的兩大方向
    程式設計師想做機器學習現在,如果您正在閱讀本文,則可能是程式設計師,或者是某種類型的開發人員。考慮一下您對機器學習的興趣。您是否看過一些經驗豐富的機器學習專家的反饋,為您免費獲得有關入門的免費建議?我一直在搜索並閱讀此建議,有些建議很好,很多則不是。我在下面收集了一些樣本:學習機器學習需要哪些數學技能?
  • 選機器學習課程怕踩雷?有人幫你選出了top 5優質課
    聊天機器人、垃圾郵件過濾、廣告服務、搜尋引擎和欺詐檢測,這些都是機器學習模型在日常生活中的應用實例。機器學習使我們為人類力不能及的事找到模式、創建數學模型。與涉及探索性數據分析、統計學、通信和可視化技術的數據科學課程不同,機器學習課程主要講授機器學習算法、數學原理,以及如何使用某種程式語言寫算法。
  • 入門|始於Jupyter Notebooks:一份全面的初學者實用指南
    Analytics Vidhya 的 Pranav Dar 近日發表了一篇上手使用 Jupyter Notebooks 的指南,從安裝到基本功能進行了簡潔清晰的介紹。引言應該使用哪個 IDE/環境/工具?這是人們在做數據科學項目時最常問的問題之一。
  • TensorFlow 2入門指南,初學者必備!
    字幕組雙語原文:TensorFlow 2入門指南,初學者必備!這些是我們必須預測的類名稱。機器學習的數據預處理目前,機器學習的第一步就是數據預處理。在這裡,我們可以看到第一個訓練示例中4個特徵的值,它的形狀是(4),當我們在它們上使用to_Category時,我們的目標標籤已經是數組格式。
  • 適用於初學者和高級程式設計師的10本最佳SQL書籍
    這本書對初學者和中級學習者都有好處。 作者提出了許多查詢,作為您在現實生活中會遇到的情況的示例。 將其用作快速參考,以查找與您在項目中面臨的問題類似的查詢。 從閱讀序言開始,如果您想了解基礎知識,請在開始閱讀本書之前通讀附錄。2.
  • 投影儀的三種類型及特點說明 投影入門小白必看!
    今天就為大家來講解一下,投影儀的三種類型和各自的特點分別是什麼。一、傳統燈泡機這可以說是我們最常見的投影儀類型了,從小時候在教室上課用的就是這種類型的投影儀。以上是對現在投影儀類型的說明,就目前的市場而言,LED投影儀應用的最為廣泛,因性價比高、攜帶性好,深受年輕群體的偏愛。如果你也想現在入手一臺投影儀,不妨考慮一下當貝投影吧~
  • 學ps必看的十大書籍排行榜!自看自學,輕鬆成為p圖大師
    今天小編就來給大家推薦學ps必看的十大書籍——學ps必看的十大書籍1、《中文版PhotoshopCS6完全自學教程》2、《中文版PhotoshopCS5實用教程》3、《摳圖+修圖+調色+合成+特效Photoshop核心應用5項修煉》
  • 去紐西蘭旅遊,你不能錯過的最佳景點指南!
    去紐西蘭旅遊,你不能錯過的最佳景點指南 !對於那些去過紐西蘭的人來說,不要對該國令人驚訝的自然美景讚不絕口。皇后鎮和瓦納卡皇后鎮將壯觀的景色和戶外探險活動結合在一起,使其成為南島不可錯過的目的地。您需要一些高度來體驗完整的湖畔全景。最常見的方式是乘坐SkylineGondola,但熱氣球飛行是一種神奇的選擇。對於冒險,你將不乏選擇。笨豬跳到城外的第一個永久商業蹦極場。
  • 初學者怎麼選擇神經網絡環境?對比MATLAB、Torch和TensorFlow
    選自arXiv機器之心編譯參與:吳攀、蔣思源、李亞洲初學者在學習神經網絡的時候往往會有不知道從何處入手的困難,甚至可能不知道選擇什麼工具入手才合適。近日,來自義大利的四位研究者發布了一篇題為《神經網絡初學者:在 MATLAB、Torch 和 TensorFlow 中的快速實現(Neural Networks for Beginners A fast implementation in Matlab, Torch, TensorFlow)》的論文,對 MATLAB、Torch 和 TensorFlow 這三種神經網絡工具進行了介紹和比較。