机器学习-Sklearn
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
高級使用
1、正規化 Normalization
由于資料的偏差與跨度會影響機器學習的成效,因此正規化(標準化)數據可以提升機器學習的成效。
# 正規化 Normalization
# 數據標準化
from sklearn import preprocessing #標準化數據模塊
import numpy as np
#建立Array
a = np.array([[10, 2.7, 3.6],
[-100, 5, -2],
[120, 20, 40]], dtype=np.float64)
print(a)
print('--------------------')
#將normalized后的a打印出
print(preprocessing.scale(a))
[[ 10. 2.7 3.6]
[-100. 5. -2. ]
[ 120. 20. 40. ]]
--------------------
[[ 0. -0.85170713 -0.55138018]
[-1.22474487 -0.55187146 -0.852133 ]
[ 1.22474487 1.40357859 1.40351318]]
# 使用sklearn.preprocessing.scale()函數,可以直接將給定數據進行標準化。
# 標準方差(standard deviation)就是方差的平方根,
# 一組數據中的每一個數與這組數據的平均數的差的平方的和再除以數據的個數,取平方根即是。
# 使用sklearn.preprocessing.StandardScaler類,使用該類的好處在于可以保存訓練集中的參數(均值、方差)直接使用其對象轉換測試集數據。
# 可以使用preprocessing.normalize()函數對指定數據進行轉換:
# 可以使用processing.Normalizer()類實現對訓練集和測試集的擬合和轉換:
# 數據標準化對機器學習成效的影響
# 加載模塊
--------------------------------------------------------------------------------------------------------------------
# 標準化數據模塊
from sklearn import preprocessing
import numpy as np
# 將資料分割成train與test的模塊
from sklearn.model_selection import train_test_split
# 生成適合做classification資料的模塊
from sklearn.datasets.samples_generator import make_classification
# Support Vector Machine中的Support Vector Classifier
from sklearn.svm import SVC
# 可視化數據的模塊
import matplotlib.pyplot as plt
# 生成適合做Classification數據
#生成具有2種屬性的300筆數據
X, y = make_classification(
n_samples=300, n_features=2,
n_redundant=0, n_informative=2,
random_state=22, n_clusters_per_class=1,
scale=100)
#可視化數據
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()
# 數據標準化前 # 標準化前的預測準確率只有0.5111111111111111 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) clf = SVC() clf.fit(X_train, y_train) print(clf.score(X_test, y_test))
# 數據標準化后 # 數據的單位發生了變化, X 數據也被壓縮到差不多大小范圍. # 標準化后的預測準確率提升至0.9111111111111111 X = preprocessing.scale(X) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) clf = SVC() clf.fit(X_train, y_train) print(clf.score(X_test, y_test))
0.9111111111111111
檢驗神經網絡 (Evaluation)
Training and Test data 誤差曲線 準確度曲線 正規化 交叉驗證
Theano: l1 l2 regularization教程
Scikit-learn: cross validation教程1
Scikit-learn: cross validation教程2
Scikit-learn: cross validation教程3
Tensorflow: dropout教程
今天我們會來聊聊在做好了屬于自己的神經網絡之后, 應該如何來評價自己的神經網絡, 從評價當中如何改進我們的神經網絡.
其實評價神經網絡的方法, 和評價其他機器學習的方法大同小異. 我們首先說說為什么要評價,檢驗學習到的神經網絡.
交叉驗證 1 Cross-validation
Model 基礎驗證法 Model 交叉驗證法(Cross Validation) 以準確率(accuracy)判斷 以平均方差(Mean squared error)
Sklearn 中的 Cross Validation (交叉驗證)對于我們選擇正確的 Model 和 Model 的參數是非常有幫助的,
有了他的幫助,我們能直觀的看出不同 Model 或者參數對結構準確度的影響。
交叉驗證 2 Cross-validation
sklearn.learning_curve 中的 learning curve 可以很直觀的看出我們的 model 學習的進度,
對比發現有沒有 overfitting 的問題. 然后我們可以對我們的 model 進行調整, 克服 overfitting 的問題.
Learning curve 檢視過擬合
總結
以上是生活随笔為你收集整理的机器学习-Sklearn的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云服务器部署好后,浏览器远程访问,提
- 下一篇: CHIL-ORACLE-创建默认约束