摘要: 想學監督學習?底子必定要打好!python
人類的將來是人工智能/機器學習。任何不瞭解的它們的人很快就會發現本身已經落後了。在這個充滿創新的世界中醒來感受科技愈來愈像魔術。有許多種方法和技術來執行人工智能和機器學習來解決實時問題,其中監督學習是最經常使用的方法之一。算法
在監督學習中,咱們從導入包含訓練屬性和目標屬性的數據集開始。監督式學習算法將學習訓練樣本與其相關目標變量之間的關係,並應用該學習關係對全新輸入(無目標)進行分類。機器學習
爲了說明監督學習是如何工做的,讓咱們從一個根據他學習的小時數來預測學生分數的例子。ide
在數學上,Y = f(X)+ C學習
其中,f將是標記學生爲考試準備的小時數之間的關係;測試
X是INPUT(他準備的小時數);阿里雲
Y是輸出(標記在考試中得分的學生);人工智能
C將是隨機錯誤。spa
監督學習算法的最終目標是以給定的新輸入X,輸出最大精度預測Y。算法工程師們已經發明瞭幾種方法來實現監督學習,咱們將探索一些最經常使用的方法。翻譯
基於給定的數據集,機器學習問題分爲兩類:分類和迴歸。若是給定的數據同時具備輸入(訓練)值和輸出(目標)值,那麼這是一個分類問題。若是數據集具備不帶任何目標標籤的屬性的連續數值,則它屬於迴歸問題。例如:
分類:有輸出標籤,它是貓仍是狗?
迴歸:房子賣多少錢?
舉一個一位但願分析乳腺癌數據的醫學研究人員的例子,以預測患者應接受三種特定治療中的哪種。該數據分析任務被稱爲分類,其中構建模型或分類器以預測類別標籤,諸如「處理A」,「處理B」或「處理C」。
分類是預測問題,包括分類預測和分類無序的類別標籤。這是一個兩步過程,由學習步驟和分類步驟組成。
分類的最佳方法
一些最經常使用的分類算法
1.K-最近鄰;
2.決策樹;
3.樸素貝葉斯;
4.支持向量機;
在學習步驟中,分類模型經過分析訓練集來創建分類器。在分類步驟中是預測給定數據的類別標籤。分析中的數據集元組及其關聯的類標籤被分紅一個訓練集和測試集。構成訓練集的各個元組從隨機抽樣的數據集中進行分析。剩餘的元組造成測試集而且獨立於訓練元組,這意味着它們不會用於構建分類器。
測試集用於估計分類器的預測準確度。分類器的準確性是分類器正確分類的測試元組的百分比。爲了得到更高的精度,最好的方法是測試不一樣的算法,並在每一個算法中嘗試不一樣的參數。最好的一個能夠經過交叉驗證來選擇。
要針對某個問題選擇一個好的算法,對於不一樣的算法必須考慮準確性、訓練時間、線性、參數數量和特殊狀況等參數。
教程:基於IRIS數據集的Scikit-Learn中實現KNN,根據給定的輸入對花的類型進行分類。
第一步,爲了應用咱們的機器學習算法,咱們須要瞭解和探索給定的數據集。在這個例子中,咱們使用從scikit-learn軟件包導入的IRIS數據集。
如今讓咱們深刻代碼並探索IRIS數據集。
確保你的機器上安裝了Python。另外,使用PIP安裝如下軟件包:
pip install pandas pip install matplotlib pip install scikit-learn
在這段代碼中,咱們使用Pandas中的幾種方法瞭解了IRIS數據集的屬性。
from sklearn import datasets import pandas as pd import matplotlib.pyplot as plt # Loading IRIS dataset from scikit-learn object into iris variable. iris = datasets.load_iris() # Prints the type/type object of iris print(type(iris)) # <class 'sklearn.datasets.base.Bunch'> # prints the dictionary keys of iris data print(iris.keys()) # prints the type/type object of given attributes print(type(iris.data), type(iris.target)) # prints the no of rows and columns in the dataset print(iris.data.shape) # prints the target set of the data print(iris.target_names) # Load iris training dataset X = iris.data # Load iris target set Y = iris.target # Convert datasets' type into dataframe df = 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.2 1 4.9 3.0 1.4 0.2 2 4.7 3.2 1.3 0.2 3 4.6 3.1 1.5 0.2 4 5.0 3.6 1.4 0.2
Scikit-learn中的K-最近鄰居
若是一個算法僅僅存儲了訓練集的元組而且等待給出測試元組,那麼就被認爲是一個懶惰學習者。只有當它看到測試元組時纔會執行泛化,以便根據元組與存儲的訓練元組的類似性對元組進行分類。
K-最近鄰分類器就是一個懶惰的學習者。
KNN基於類比學習,即將給定的測試元組與相似的訓練元組進行比較。訓練元組由n個屬性描述,每一個元組表明一個n維空間中的一個點。這樣,全部訓練元組都存儲在n維模式空間中。當給定未知元組時,k-最近鄰分類器在模式空間中搜索最接近未知元組的k個訓練元組。這k個訓練元組是k未知元組的k個「最近鄰居」。
在下面這個代碼段中,咱們從sklearn提供進口KNN分類器,並將其應用於咱們的輸入數據,而後對花進行分類。
from sklearn import datasets from sklearn.neighbors import KNeighborsClassifier # Load iris dataset from sklearn iris = 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 values knn.fit(iris['data'], iris['target']) # Provide data whose class labels are to be predicted X = [ [5.9, 1.0, 5.1, 1.8], [3.4, 2.0, 1.1, 4.8], ] # Prints the data provided print(X) # Store predicted class labels of X prediction = knn.predict(X) # Prints the predicted class labels of X print(prediction)
輸出:
[1 1]
這裏 ,0對應Versicolor
1對應Virginic
2對應Setosa
基於給定的輸入,機器使用KNN預測兩種花是Versicolor。
KNN直觀的IRIS數據集分類
迴歸
迴歸一般被稱爲肯定兩個或更多變量之間的關係。例如,考慮你必須根據給定的輸入數據X來預測一我的的收入。
這裏的目標變量意味着咱們關心預測的未知變量,連續意味着Y能夠承擔的值不存在間隙(不連續性)。
預測收入是一個典型的迴歸問題。你的輸入數據應該包含全部能夠預測收入的信息(稱爲特徵),例如他的工做時間、教育經歷、職位、他住的地方。
流行的迴歸模型
一些經常使用的迴歸模型是:
線性迴歸使用的是最佳擬合直線(也稱爲迴歸線)創建因變量(Y)與一個或多個自變量(X)之間的關係。
在數學上,h(xi)=βo+β1* xi + e,其中βo是截距,β1是線的斜率,e是偏差項。
從圖形上看,
Logistic Regression是一種算法,用於響應變量是分類的地方。Logistic迴歸的想法是找出特徵與特定結果的機率之間的關係。
在數學上,p(X)=βo+β1* X,其中p(x)= p(y = 1 | x)
從圖形上看,
多項式迴歸是一種迴歸分析的形式,其中自變量x和因變量y之間的關係被建模爲x中的n次多項式。
解決線性迴歸問題
咱們有咱們的數據集X和相應的目標值Y,咱們使用普通最小二乘來學習一個線性模型,咱們能夠用它來預測一個新的y,給出一個之前看不見的x,儘量小的偏差。
給定的數據被分紅一個訓練數據集和一個測試數據集。訓練集具備標籤(特徵加載),因此算法能夠從這些標記的例子中學習。測試集沒有任何標籤,也就是說,你還不知道試圖預測的價值。
咱們將考慮一個要素進行訓練,並應用線性迴歸方法擬合訓練數據,而後使用測試數據集預測輸出。
在scikit-learn中實現線性迴歸
from sklearn import datasets, linear_model import matplotlib.pyplot as plt import numpy as np # Load the diabetes dataset diabetes = datasets.load_diabetes() # Use only one feature for training diabetes_X = diabetes.data[:, np.newaxis, 2] # Split the data into training/testing sets diabetes_X_train = diabetes_X[:-20] diabetes_X_test = diabetes_X[-20:] # Split the targets into training/testing sets diabetes_y_train = diabetes.target[:-20] diabetes_y_test = diabetes.target[-20:] # Create linear regression object regr = linear_model.LinearRegression() # Train the model using the training sets regr.fit(diabetes_X_train, diabetes_y_train) # Input data print('Input Values') print(diabetes_X_test) # Make predictions using the testing set diabetes_y_pred = regr.predict(diabetes_X_test) # Predicted Data print("Predicted Output Values") print(diabetes_y_pred) # Plot outputs plt.scatter(diabetes_X_test, diabetes_y_test, color='black') plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1) plt.show()
輸出:
Input Values [ [ 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 ] ] Predicted Output Values [ 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 ]
(糖尿病_X_測試,糖尿病_y_pred)預測之間的圖將在線方程上連續。
結束筆記
用於監督機器學習的其餘Python軟件包。
Scikit-Learn,Tensorflow,Pytorch。
本文由@阿里云云棲社區組織翻譯。
文章原標題《supervised-learning-with-python》,
譯者:虎說八道,審校:袁虎。
本文爲雲棲社區原創內容,未經容許不得轉載。