小白學數據:教你用Python實現簡單監督學習算法

2021-01-06 大數據文摘

大數據文摘作品

編譯:文明、笪潔瓊、天培

今天,文摘菌想談談監督學習。

監督學習作為運用最廣泛的機器學習方法,一直以來都是從數據挖掘信息的重要手段。即便是在無監督學習興起的近日,監督學習也依舊是入門機器學習的鑰匙。

這篇監督學習教程適用於剛入門機器學習的小白。

當然了,如果你已經熟練掌握監督學習,也不妨快速瀏覽這篇教程,檢驗一下自己的理解程度~

什麼是監督學習?

在監督學習中,我們首先導入包含有訓練屬性和目標屬性的數據集。監督學習算法會從數據集中學習得出訓練樣本和其目標變量之間的關係,然後將學習到的關係對新樣本(未被標記的樣本)進行分類。

為了闡明監督學習的工作原理,我們用根據學生學習時間預測其考試成績的例子來說明。

用數學表示,即Y = f(X)+ C,其中

f表示學生學習時間和考試成績之間的關係X表示輸入(學習小時數)Y表示輸出(考試分數)C表示隨機誤差

監督學習算法的終極目標是給出新的輸入X,使得預測結果Y的準確率最大。有很多方法可以實現有監督學習,我們將探討幾種最常用的方法。

根據給定的數據集,機器學習可以分為兩大類:分類(Classification)和回歸(Regression)。如果給定的數據集的輸出值是類別,那麼待解決是分類問題。如果給定的數據集的輸出值是連續的,那麼該問題是回歸問題。

舉兩個例子

分類:判斷是貓還是狗。

回歸:房子的售價是多少?

分類

考慮這樣一個例子,醫學研究員想要分析乳腺癌數據,用於預測患者使用三種治療方案中的哪一種。該數據分析問題就屬於分類問題,通過建立分類模型來預測類別標籤,例如「治療方案A」、「治療方案B」或者「治療方案C」。

分類是一個預測類別標籤的預測問題,這些類別標籤都是離散和無序的。分類包含兩個步驟:學習步驟和分類步驟。

分類方法和選擇最優方法

一些常見的分類算法:

K近鄰決策樹樸素貝葉斯支持向量機

在學習步驟中,分類模型通過分析訓練集數據建立一個分類器。在分類步驟中,分類器對給定的數據進行分類。用於分析的數據集(包含數據和其對應的標籤)被劃分為訓練集和測試集。訓練集從分析用的數據集中隨機抽取。剩下的數據集構成測試集。測試集和訓練集相互獨立,即測試集中的數據不會被構建於分類器。

測試集用於評價分類器的預測精度。分類器的精度用測試集中預測正確的百分比表示。為了獲得更高的精度,最好的方法是測試多個不同的算法,同時,對每個算法嘗試不同的參數。可以通過交互檢驗選擇最好的算法和參數。

對於給定問題,在選取算法時,算法的精度、訓練時間、線性、參數數目以及特殊情況都要考慮在內。

在IRIS數據集上實現sklearn中的KNN,並對給定的輸入進行花卉類型分類。

首先,要應用機器學習算法,我們需要了解給定數據集的組成。在這個例子中,我們使用內置在sklearn包中的IRIS數據集。現在讓我們使用代碼查看IRIS數據集。

請確保你的電腦上成功安裝了Python。然後,通過PIP安裝下面這些python庫:

pip install pandaspip install matplotlibpip install scikit-learn

在下面這段代碼中,我們使用pandas中的一些方法查看IRIS數據集的一些屬性。

from sklearn import datasetsimport pandas as pdimport matplotlib.pyplot as plt# Loading IRIS dataset from scikit-learn object into iris variable.iris = datasets.load_iris()# Prints the type/type object of irisprint(type(iris))# <class 'sklearn.datasets.base.Bunch'># prints the dictionary keys of iris dataprint(iris.keys())# prints the type/type object of given attributesprint(type(iris.data), type(iris.target))# prints the no of rows and columns in the datasetprint(iris.data.shape)# prints the target set of the dataprint(iris.target_names)# Load iris training datasetX = iris.data# Load iris target setY = iris.target# Convert datasets' type into dataframedf = pd.DataFrame(X, columns=iris.feature_names)# Print the first five tuples of dataframe.print(df.head())

輸出:

<class 『sklearn.datasets.base.Bunch』>dict_keys([『data』, 『target』, 『target_names』, 『DESCR』, 『feature_names』])]<class 『numpy.ndarray』> <class 『numpy.ndarray』>(150, 4)[『setosa』 『versicolor』 『virginica』]sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)0 5.1 3.5 1.4 0.21 4.9 3.0 1.4 0.22 4.7 3.2 1.3 0.23 4.6 3.1 1.5 0.24 5.0 3.6 1.4 0.2

Sklearn中的K最近鄰算法

如果一個算法僅存儲訓練集數據,並等待測試集數據的給出,那麼這個算法便可認為是一個「懶惰學習法」。直到給定測試集數據,它才會根據它與存儲的訓練集樣本的相似性來對新樣本進行分類。

K近鄰分類器就是一個懶惰學習法。

K近鄰基於類比學習,比較一個測試樣本和與之相似訓練集數據。訓練集有n個屬性表徵。每個樣本由n維空間中的一個點表示。這樣,訓練集中的所有樣本都儲存在n維模式空間中。當給定一個未知的樣本,K近鄰分類器在模式空間中搜尋和未知樣本最接近的k個訓練樣本。這k個訓練樣本就是未知樣本的k個近鄰。

「接近度」用距離來度量,例如歐幾裡得距離。較好的K值可以通過實驗確定。

在下面這段代碼中,我們導入KNN分類器,將之應用到我們的輸入數據中,然後對花卉進行分類。

from sklearn import datasetsfrom sklearn.neighbors import KNeighborsClassifier# Load iris dataset from sklearniris = datasets.load_iris()# Declare an of the KNN classifier class with the value with neighbors.knn = KNeighborsClassifier(n_neighbors=6)# Fit the model with training data and target valuesknn.fit(iris['data'], iris['target'])# Provide data whose class labels are to be predictedX = [ [5.9, 1.0, 5.1, 1.8], [3.4, 2.0, 1.1, 4.8],]# Prints the data providedprint(X)# Store predicted class labels of Xprediction = knn.predict(X)# Prints the predicted class labels of Xprint(prediction)

輸出:

[1 1]

其中,0,1,2分別代表不同的花。在該例子中,對於給定的輸入,KNN分類器將它們都預測成為1這個類別的花。

KNN對IRIS數據集分類的直觀可視化

回歸

回歸通常被定義為確定兩個或多個變量之間的相關關係。例如,你要通過給定的數據X預測一個人的收入。這裡,目標變量是指該變量是我們關心以及想要預測的未知變量,而連續是指Y的取值沒有間隔。

預測收入是一個經典的回歸問題。你的輸入應當包含所有與收入相關的個人信息(比如特徵),這些信息可以預測收入,例如工作時長、教育經歷、職稱以及他的曾住地等。

回歸模型

一些常見的回歸模型有

線性回歸邏輯回歸多項式回歸

線性回歸通過擬合一條直線(回歸線)來建立因變量(Y)與一個或多個自變量(X)之間關係。

用數學公示表示,即h(xi) = βo + β1 * xi + e,其中

βo是截距β1是斜率e是誤差項

用圖表示,即

邏輯回歸是一種預測類別的算法,用於找出特徵和特定輸出概率之間關係。

當然了,我們也可以把邏輯回歸歸類為分類算法,但就像我們剛才所說,邏輯回歸的輸出其實是目標對象屬於某一類別的概率。既然概率是連續的,我們依舊把邏輯回歸算作回歸算法。

用數學公式表示:p(X) = βo + β1 * X,其中p(x) = p(y = 1 | x)

圖形表示為

多項式回歸是一種將自變量x與因變量y的關係擬合為x的n階多項式的回歸算法。

解決線性回歸問題

我們有數據集X,以及對應的目標值Y,我們使用普通最小二乘法通過最小化預測誤差來擬合線性模型

給定的數據集同樣劃分為訓練集和測試集。訓練集由已知標籤的樣本組成,因此算法能夠通過這些已知標籤的樣本來學習。測試集樣本不包含標籤,你並不知道你試圖預測樣本的標籤值。

我們將選擇一個需要訓練的特徵,應用線性回歸方法擬合訓練數據,然後預測測試集的輸出。

用Sklearn實現線性回歸

from sklearn import datasets, linear_modelimport matplotlib.pyplot as pltimport numpy as np# Load the diabetes datasetdiabetes = datasets.load_diabetes()# Use only one feature for trainingdiabetes_X = diabetes.data[:, np.newaxis, 2]# Split the data into training/testing setsdiabetes_X_train = diabetes_X[:-20]diabetes_X_test = diabetes_X[-20:]# Split the targets into training/testing setsdiabetes_y_train = diabetes.target[:-20]diabetes_y_test = diabetes.target[-20:]# Create linear regression objectregr = linear_model.LinearRegression()# Train the model using the training setsregr.fit(diabetes_X_train, diabetes_y_train)# Input dataprint('Input Values')print(diabetes_X_test)# Make predictions using the testing setdiabetes_y_pred = regr.predict(diabetes_X_test)# Predicted Dataprint("Predicted Output Values")print(diabetes_y_pred)# Plot outputsplt.scatter(diabetes_X_test, diabetes_y_test, color='black')plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1)plt.show()

輸入

輸入值:

[ [ 0.07786339] [-0.03961813] [ 0.01103904] [-0.04069594] [-0.03422907] [ 0.00564998] [ 0.08864151] [-0.03315126] [-0.05686312] [-0.03099563] [ 0.05522933] [-0.06009656] [ 0.00133873] [-0.02345095] [-0.07410811] [ 0.01966154] [-0.01590626] [-0.01590626] [ 0.03906215] [-0.0730303 ] ]

預測的輸出值:

[ 225.9732401 115.74763374 163.27610621 114.73638965 120.80385422 158.21988574 236.08568105 121.81509832 99.56772822 123.83758651 204.73711411 96.53399594 154.17490936 130.91629517 83.3878227 171.36605897 137.99500384 137.99500384 189.56845268 84.3990668 ]

結語

提一下常用的監督學習的python庫

Scikit-LearnTensorflowPytorch

最後布置一個作業:請根據文章內容,用監督學習推測一下今天的文摘菌是哪位帥哥小編~

原文連結:https://towardsdatascience.com/supervised-learning-with-python-cf2c1ae543c

相關焦點

  • Python無監督學習的4大聚類算法
    新智元編譯 來源:towardsdatascience.com作者:Vihar Kurama 翻譯:肖琴【新智元導讀】 無監督學習是機器學習技術中的一類,用於發現數據中的模式。本文介紹用Python進行無監督學習的幾種聚類算法,包括 K-Means 聚類、分層聚類、 t-SNE聚類、 DBSCAN聚類等。
  • 小白學攝影 教你如何簡單快速穿肩帶
    小白學攝影 教你如何簡單快速穿肩帶 2013年12月09日 02:30作者:張樂編輯:張樂文章出處:泡泡網原創     泡泡網數位相機頻道12月9
  • 零基礎如何學Python?小白學Python需要多久?
    小白學Python需要多久呢?下面,小編就與大家來看一下!比如你今天學習什麼內容,而且今天學習的內容跟著什麼案例練習,如果你學習JAVA只是看看免費的視頻,那我勸你還是不要浪費時間,必須跟著大量的案例,反正練習,對於一個知識點才可以真正的掌握。
  • 教你學Python24-帶你開啟機器學習時代
    先簡單帶大家看一些學習機器學習需要哪些東西,大概有什麼用,做什麼的,具體的內容後面我會一一具體的來和大家說,所謂「機器學習」就是利用計算機將紛繁複雜的數據處理成有用的信息,這樣就可以發掘出數據帶來的意義以及隱藏在數據背後的規律。
  • 用Python 做機器學習不得不收藏的重要庫
    以下是機器學習中最常用的一些庫: Scikit-learn 經典的ML算法 Scikit-learn 是最流行的ML 庫之一,他支持很多監督學習和非監督學習算法。例如:線性回歸,邏輯回歸,決策樹,聚類 ,k-means等。
  • 跟著吳恩達老師學習機器學習,Python筆記分享!
    但是我想說這裡有一個問題,那就是這門課程的所有作業和演示都是用Matlab做的。我是一個Python使用者而且我不想學Matlab.因此我只在課上學習概念然後自己用Python實現這些算法。我用自己的方式解釋所有的算法(以我能做到的最簡潔的水平)然後演示之前幾篇文章的幾乎所有算法開發過程。我覺得我可以把它們全部總結到一頁紙的篇幅,這樣可以讓學的人更容易跟上一點。
  • 人工智慧入門:用python教你實現手寫數字識別!
    今天我給大家帶來一個用機器學習的方法來實現手寫數字識別的教程,就像C語言中輸出的那一行「Hellow World」一樣,這個教程也是入門圖像識別中需要學會的第一個技能,我們將會使用tensorflow深度學習框架來實現手寫數字識別,在觀看此教程之前你需具備以下基礎:python基本語法神經網絡基礎知識tensorflow框架的基本使用線性代數基本知識如果你不具備以上基礎怎麼辦?
  • 手把手教你用python搶京東大額神券
    ,等著倒計時慢慢臨近,期待搶到自己喜愛的優惠券,然而最終得到的往往是「券已搶完」為了彌補手速的缺憾,今天我教大家如何用python搶優惠券,讓你的「手速」提高數十倍。三、python模擬請求Key值找到了,下面就可以用requests模擬搶券了,python模擬請求代碼如下:import requestsheader={&39;:&39;, &39;:&39;,
  • 教你學習:Python-100-Days-01
    教你學習:Python-100-Days-01 本項目是參考項目內容,進行個人理解,和原有項目有出入,如想了解詳情,請自行百度去搜索項目為什麼用Python?python是腳本語言,學習簡單。包含很多環境的數學包,可以簡化我們的開發,方便我們數學計算。未來是數據的時代,java和python是必須要會的語言,是人工智慧和大數據的基礎。
  • 小白學編程?從一個簡單的程序開始學習Python編程
    筆者學習編程的時間也挺長的,因為業餘,因為時間不多,各種原因,自學編程的路特別難走。然後筆者發現,自己能為小白貢獻一些力量,然後決定創作適合小白的python編程類內容。今天,筆者想帶編程小白們從一個簡單的程序開始學習Python編程。在前一篇文章pycharm的基本操作,創建項目,新建py文件,編寫代碼及保存筆者實際上已經編了一個簡單程序。代碼只有一行。
  • Python之父Guido van Rossum:教你用「膠水語言」實現辦公自動化
    三、Python實現首先導入需要的模塊from pptx import Presentationfrom docx import Document****需要注意的是,安裝的時候是python-docx
  • 強化學習是針對優化數據的監督學習?
    其中,諸如REINFORCE等通過計算不可微目標期望函數的梯度進行優化的算法被歸類為優化視角,而時序差分學習(TD-Learning)或Q-Learning等則是動態規劃類算法。雖然這些方法在近年來取得了很大的成功,但依然不能很好地遷移到新任務上。相較於這些強化學習方法,深度監督學習能夠很好的在不同任務之間進行遷移學習,因此我們不禁問:是否能將監督學習方法用在強化學習任務上?
  • 10行代碼教你用python鑑黃
    大家好,今天我們來教大家用python識別黃色圖片,識別黃色圖片的算法有很多,今天來講一個最簡單的算法算法原理:將圖片轉換為YCbCr模式,在圖片中尋找圖片色值像素,如果在皮膚色值內的像素麵積超過整個畫面的1/3,就認為是黃色圖片。好了,原理很簡單,那我們來編寫代碼試試實戰需要安裝python圖片庫PIL支持,PIL是Python的圖像處理標準庫,支持多種格式,並提供強大的圖形與圖像處理功能。
  • Python之父Guido van Rossum:教你用「膠水語言」實現辦公自動化
    現在需要將PPT中的文字都提取出來並寫入Word中,如下圖二、涉及知識代碼實際上非常簡單,基於python-pptx和python-docx兩個模塊即可,核心代碼只有6行。如果對本文的代碼和數據感興趣可以在後臺回復自動化獲取,最後還是希望大家能夠理解Python辦公自動化的一個核心就是批量操作-解放雙手,讓複雜的工作自動化!
  • 利用Python簡單實現網易雲用戶算法推薦系統
    記錄一點關於推薦系統的知識和實現。 音樂推薦系統,這裡的簡單指的是數據量級才2萬條,之後會詳細解釋。數據爬蟲腳本代碼說明: 1. 網易雲音樂網絡爬蟲由於加了數據包傳動態參數的反爬措施。拿到歌單數據包的難度很大。一大神破解了傳參動態密碼,代碼中AES算法。 2. 但是不知道為什麼這個python2.7版下腳本只能爬取每個歌單裡面的10首歌,由於這個原因,導致我們的推薦系統原始數據量級驟然降低。筆者試了很久,也沒有辦法。望大家給點建議。
  • 福利:大佬教你如何用 Python 自動化玩轉 Excel
    程式設計師大佬,教你如何用程式設計師大佬,教你如何用中使用python編程,這些通過xlwings都可以巧妙實現。這裡不對該內容做詳細講解,感興趣的童鞋可以去xlwings官網學習。等分析庫,非常適合奔波於python和excel之間的童鞋,讓你更輕鬆地分析數據!
  • 「小白學Python」掌握Python循環,讓機器給我打工
    條件語句回顧:「小白學Python」3分鐘掌握Python條件語句if我們已經介紹過了順序語句和條件語句,今天介紹的是循環語句。循環是電腦之所以強大的核心之一。電腦可以把一個動作,或者一組動作進行不知疲倦的循環,直到達到想要的結果。而這個過程如果讓人們計算需要大量的時間和精力。當我們需要計算,1+1 的時候,很簡單就能夠得到結果。
  • 資料|《常用數據挖掘算法總結及 Python 實現》
    今日資料推薦《 常用數據挖掘算法總結及 Python 實現 》這份資源非常適合相關的從業人員或大數據愛好者,該文檔總結了常用的數據挖掘的算法原理以及 Python 實踐內容,為初學者提供良好的參考資料目錄:第一部分:數據挖掘與機器學習數學基礎第二部分:機器學習概述第三部分:監督學習--分類與回歸第四部分:非監督學習--聚類與關聯分析
  • 大廠資深算法工程師,用Python入門知識點做聊天窗口,很簡單
    最近幾年,學習python的人越來越多,也有越來越多的放棄python。放棄的主要原因其實就是:學習的過程過於困難和枯燥。下面,我給你大家介紹利用python入門知識點,和搭配完整詳細教程以及所有源碼的項目,也就是實現聊天窗口的效果,它十分簡單,作為Python入門的練手項目十分合適。
  • 教你用Python入門年薪百萬的數據AI行業
    教你用Python入門年薪百萬的數據AI行1.機器學習這是圍繞機器學習建立實用直覺的最快方法之一。哪些模型對缺失數據很有效?哪些型號能很好地處理分類功能?是的,您可以通過教科書來尋找答案,但通過觀察它可以更好地學習。其次,這個項目將教你快速模型化原型的寶貴技能。在現實世界中,通常很難知道哪種模型在不嘗試它們的情況下表現最佳。最後,本練習可幫助您掌握模型構建的工作流程。例如,你將練習......