1. 程式人生 > >機器學習-Sklearn

機器學習-Sklearn

and learn ams 而且 dev option ring app 模型

Scikit learn 也簡稱 sklearn, 是機器學習領域當中最知名的 python 模塊之一.

Sklearn 包含了很多種機器學習的方式:

Classification 分類
Regression 回歸
Clustering 非監督分類
Dimensionality reduction 數據降維
Model Selection 模型選擇
Preprocessing 數據預處理
我們總能夠從這些方法中挑選出一個適合於自己問題的, 然後解決自己的問題.

安裝

Scikit-learn (sklearn)

Windows 註意事項 
如果你是 Windows 用戶, 你也可以選擇使用 Anaconda 來安裝所有 python 的科學計算模塊. Anaconda的相關資料在這

一般使用

1、選擇學習方法:看圖

Sklearn 官網提供了一個流程圖, 藍色圓圈內是判斷條件,綠色方框內是可以選擇的算法:

技術分享圖片

從 START 開始,首先看數據的樣本是否 >50,小於則需要收集更多的數據。

由圖中,可以看到算法有四類,分類,回歸,聚類,降維。

其中 分類和回歸是監督式學習,即每個數據對應一個 label。

聚類 是非監督式學習,即沒有 label。
另外一類是 降維,當數據集有很多很多屬性的時候,可以通過 降維 算法把屬性歸納起來。
例如
20 個屬性只變成 2 個,註意,這不是挑出 2 個,而是壓縮成為 2 個,
它們集合了 20 個屬性的所有特征,相當於把重要的信息提取的更好,不重要的信息就不要了。
然後看問題屬於哪一類問題,是分類還是回歸,還是聚類,就選擇相應的算法。 當然還要考慮數據的大小,例如 100K 是一個閾值。 可以發現有些方法是既可以作為分類,也可以作為回歸,例如 SGD。

回歸:regression /r?‘gre?(?)n/ /r?‘ɡr???n/

聚類:clustering /‘kl?st?r??/ /‘kl?st?/

維度:dimensionality /d?,men??‘næl?t?/ /da?m?n??‘næl?ti/

2、通用學習模式

要點
導入模塊
創建數據
建立模型-訓練-預測

要點

sklearn包不僅囊括很多機器學習的算法,也自帶了許多經典的數據集,鳶尾花數據集就是其中之一。

Sklearn 把所有機器學習的模式整合統一起來了,學會了一個模式就可以通吃其他不同類型的學習模式。

例如,分類器,

Sklearn 本身就有很多數據庫,可以用來練習。 以 Iris 的數據為例,這種花有四個屬性,花瓣的長寬,莖的長寬,根據這些屬性把花分為三類。

我們要用 分類器 去把四種類型的花分開。
# 導入模塊
import pandas as pd
# sklearn包不僅囊括很多機器學習的算法,也自帶了許多經典的數據集,(yuan)鳶尾花數據集就是其中之一。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 創建數據
# 加載 iris 的數據,把屬性存在 X,類別標簽存在 y
iris = datasets.load_iris()
iris_X = iris.data      
iris_y = iris.target
# 觀察一下數據集,X 有四個屬性,y 有 0,1,2 三類:
print(iris_X[:2, :])
print(iris_y)
技術分享圖片
# 把數據集分為訓練集和測試集,其中 test_size=0.3,即測試集占總數據的 30%:
X_train, X_test, y_train, y_test = train_test_split(
    iris_X, iris_y, test_size=0.3)
# 可以看到分開後的數據集,順序也被打亂,這樣更有利於學習模型:
print(y_train)
技術分享圖片
# 建立模型-訓練-預測

# 定義模塊方式 KNeighborsClassifier(), 用 fit 來訓練 training data,這一步就完成了訓練的所有步驟, 後面的 knn 就已經是訓練好的模型,可以直接用來 predict 測試集的數據, 對比用模型預測的值與真實的值,可以看到大概模擬出了數據,但是有誤差,是不會完完全全預測正確的。、
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
print(knn.predict(X_test))
print(y_test)
技術分享圖片

3、sklearn 強大數據庫

要點
導入模塊
導入數據-訓練模型
創建虛擬數據-可視化

學習資料:

  • 相關代碼
  • 更多可用數據 網址

今天來看 Sklearn 中的 datasets,很多而且有用,可以用來學習算法模型。

eg: boston 房價, 糖尿病, 數字, Iris 花。

也可以生成虛擬的數據,例如用來訓練線性回歸模型的數據,可以用函數來生成。
from __future__ import print_function
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# 導入數據-訓練模型 
# 用 datasets.load_boston() 的形式加載數據,並給 X 和 y 賦值,這種形式在 Sklearn 中都是高度統一的。
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target

# 定義模型。
model = LinearRegression()# 線性回歸
model.fit(data_X, data_y)

# 再打印出預測值,這裏用 X 的前 4 個來預測,同時打印真實值,作為對比,可以看到是有些誤差的。

print(model.predict(d
print(model.predict(data_X[:4, :]))
print(data_y[:4])
# 為了提高準確度,可以通過嘗試不同的 model,不同的參數,不同的預處理等方法,入門的話可以直接用默認值。
                    
# 創建虛擬數據-可視化
# 用函數來建立 100 個 sample,有一個 feature,和一個 target,這樣比較方便可視化。    
# 用 scatter(散點圖) 的形式來輸出結果。                    
X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=10)
plt.scatter(X, y)
plt.show()
技術分享圖片
# 可以看到用函數生成的 Linear Regression 用的數據。

# noise 越大的話,點就會越來越離散,例如 noise 由 10 變為 50.
X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=50)
plt.scatter(X, y)
plt.show()

技術分享圖片


noise : float, optional (default=0.0)

The standard deviation of the gaussian noise applied to the output.

高斯噪聲對輸出的標準差。

4、 sklearn 常用屬性與功能

訓練和預測
參數和分數
from sklearn import datasets
from sklearn.linear_model import LinearRegression

loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target

model = LinearRegression()
# 訓練和預測
# 接下來 model.fit 和 model.predict 就屬於 Model 的功能,用來訓練模型,用訓練好的模型預測。
model.fit(data_X, data_y)

print(model.predict(data_X[:4, :]))
技術分享圖片
# 參數和分數

# 然後,model.coef_ 和 model.intercept_ 屬於 Model 的屬性, 例如對於 LinearRegressor 這個模型,
# 這兩個屬性分別輸出模型的斜率和截距(與y軸的交點)。
print(model.coef_)
print(-----------------)
print(model.intercept_)
技術分享圖片
# model.get_params() 也是功能,它可以取出之前定義的參數。
print(model.get_params())
技術分享圖片
# model.score(data_X, data_y) 它可以對 Model 用 R^2 的方式進行打分,輸出精確度。
# 關於 R^2 coefficient of determination 可以查看 wiki
print(model.score(data_X, data_y)) # R^2 coefficient of determination
0.7406077428649428
 

機器學習-Sklearn