scikit-learn学习笔记-bili莫烦
生活随笔
收集整理的這篇文章主要介紹了
scikit-learn学习笔记-bili莫烦
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
bilibili莫煩scikit-learn視頻學習筆記
?
1.使用KNN對iris數據分類
from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier# 從datasets中導入iris數據,包含150條樣本,每條樣本4個feature iris_data = datasets.load_iris() # 獲取feature iris_x = iris_data.data # 獲取標簽 iris_y = iris_data.target print(iris_x.shape) print(iris_y) # 將數據集分為訓練集和測試集,比例是70%:30% train_x, test_x, train_y, test_y = train_test_split(iris_x, iris_y, test_size=0.3) # 使用knn分類器(n_neighbors表示通過附近的幾個鄰居來確定分類,一般為單數) knn = KNeighborsClassifier(n_neighbors = 5) # 訓練 knn.fit(train_x, train_y) # 測試 print(knn.predict(test_x)) print(test_y)2.使用線性回歸預測Boston房價
from sklearn import datasets from sklearn.linear_model import LinearRegression# 從datasets中載入Boston房價數據集 loaded_data = datasets.load_boston() # 包含506條樣本,每條樣本13個feature data_x = loaded_data.data # 標簽,即房價(萬) data_y = loaded_data.target# 線性回歸器 lr = LinearRegression() # 訓練 lr.fit(data_x, data_y) # 預測前6條樣本的房價 print(lr.predict(data_x[:6, :])) # 與標簽對比,可以看出準確度 print(data_y[:6])3.如何創建線性數據(實驗數據)
from sklearn import datasets import matplotlib.pyplot as plt# 使用make_regression函數生成線性回歸數據集,100個樣本,1個feature,noise控制噪聲即偏移度 made_data_x, made_data_y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=30) # 使用matplotlib畫散點圖 plt.scatter(made_data_x, made_data_y) # 顯示圖像 plt.show()# 使用線性回歸器來進行訓練和預測 lr = LinearRegression() lr.fit(made_data_x, made_data_y) print(lr.predict(made_data_x[:5, :])) print(made_data_y[:5]) # 打印學習到的參數集,y = wx + b print(lr.coef_) # output w,w是一個向量,數量和n_features一致 print(lr.intercept_) # output b,b即bias4.輸出模型的一些參數
# 打印學習到的參數集,y = wx + b print(lr.coef_) # output w,w是一個向量,數量和n_features一致,w = [28.44936087] print(lr.intercept_) # output b,b即bias = -2.787101732423871 # 打印LinearRegression的參數值,未手工設置則打印默認參數 print(lr.get_params()) # 打印{'copy_X': True, 'fit_intercept': True, 'n_jobs': 1, 'normalize': False} # 使用數據進行測試,并打分,在回歸中使用R^2 coefficient of determination print(lr.score(test_x, test_y))5.使用SVC進行分類(數據伸縮)
import numpy as np import matplotlib.pyplot as pltfrom sklearn import preprocessing from sklearn.model_selection import train_test_split from sklearn.datasets.samples_generator import make_classification # 從svm模塊中導入support vector classifier from sklearn.svm import SVC# 創建數據集 X, y = make_classification(n_samples=3000, n_features=2, n_redundant=0, n_informative=2, random_state=22,n_clusters_per_class=1, scale=100) # 畫圖c=y的意思是顏色根據y來區分 plt.scatter(X[:, 0], X[:, 1], c=y) plt.show()# 將數據伸縮為[0,1] scales_x = preprocessing.scale(X) # 伸縮后的數據方差為1.0 print(np.std(scales_x))# 使用SVC分類器分類 train_x, test_x, train_y, test_y = train_test_split(scales_x, y, test_size=0.3) model = SVC() model.fit(train_x, train_y) # 模型分類準確率大概為0.90 print(model.score(test_x, test_y))6.KNN分類iris,交叉驗證,參數選擇并可視化
import matplotlib.pyplot as plt from sklearn import datasets from sklearn.neighbors import KNeighborsClassifier # 導入交叉驗證 from sklearn.model_selection import cross_val_score# 從datasets中導入iris數據,包含150條樣本,每條樣本4個feature iris_data = datasets.load_iris() iris_x = iris_data.data iris_y = iris_data.target# 嘗試n_neighbors為不同值時,模型準確度 nb = range(1, 31) # 保存每次n_neighbors對應準確率,用于plt畫圖 k_scores = [] for k in nb:# 使用KNN模型knn = KNeighborsClassifier(n_neighbors=k)# 使用交叉驗證,不需要自己去切分數據集,也不需要knn.fit()和knn.predict(),cv=5表示交叉驗證5組scores = cross_val_score(knn, iris_x, iris_y, cv=5, scoring='accuracy')# 取交叉驗證集的平均值 k_scores.append(scores.mean())# 畫出n_neighbor于accuracy的關系圖 plt.plot(nb,k_scores) plt.xlabel("Value of n_neighbors") plt.ylabel("Value of Accuracy") plt.show()7.使用交叉驗證,并畫出學習曲線learning_curve,用于觀察模型擬合情況
import numpy as np import matplotlib.pyplot as plt# 導入sklearn提供的損失曲線 from sklearn.model_selection import learning_curve from sklearn.datasets import load_digits from sklearn.svm import SVC# 導入數據 digits = load_digits() X = digits.data y = digits.target# 使用學習曲線獲取每個階段的訓練損失和交叉測試損失,train_sizes表示各個不同階段,從10%到100% train_sizes, train_loss, test_loss = learning_curve(SVC(gamma=0.001), X, y, cv=10, scoring='neg_mean_squared_error',train_sizes=np.linspace(0.1, 1, 10) )# 將每次訓練集交叉驗證(10個損失值,因為cv=10)取平均值 train_loss_mean = -np.mean(train_loss, axis=1) print(train_loss_mean) # 將每次測試集交叉驗證取平均值 test_loss_mean = -np.mean(test_loss, axis=1) print(test_loss_mean) # 畫圖,紅色是訓練平均損失值,綠色是測試平均損失值 plt.plot(train_sizes, train_loss_mean, 'o-', color='r', label='Training') plt.plot(train_sizes, test_loss_mean, 'o-', color='g', label='Cross_validation') plt.xlabel('Train sizes') plt.ylabel('Loss') plt.show()?
8.使用交叉驗證,并畫出驗證曲線validation_curve,用于觀察模型參數不同時的準確率
import numpy as np import matplotlib.pyplot as plt# 導入sklearn提供的驗證曲線 from sklearn.model_selection import validation_curve from sklearn.datasets import load_digits from sklearn.svm import SVC# 導入數據 digits = load_digits() X = digits.data y = digits.target# SVC參數gamma的范圍 param_range = np.logspace(-6, -2.3, 5)# 使用validation曲線,指定params的名字和范圍 train_loss, test_loss = validation_curve(SVC(), X, y, param_name='gamma', param_range=param_range, cv=10, scoring='neg_mean_squared_error' )# 將每次訓練集交叉驗證(10個損失值,因為cv=10)取平均值 train_loss_mean = -np.mean(train_loss, axis=1) print(train_loss_mean) # 將每次測試集交叉驗證取平均值 test_loss_mean = -np.mean(test_loss, axis=1) print(test_loss_mean) # 畫圖,紅色是訓練平均損失值,綠色是測試平均損失值,注意這里的x坐標是param_range plt.plot(param_range, train_loss_mean, 'o-', color='r', label='Training') plt.plot(param_range, test_loss_mean, 'o-', color='g', label='Cross_validation') plt.xlabel('Gamma') plt.ylabel('Loss') plt.show()?
9.使用pickle保存模型到文件
import pickle from sklearn.datasets import load_iris from sklearn.svm import SVCiris = load_iris() X = iris.data y = iris.target# # 使用SVC模型 # model = SVC() # # 訓練模型 # model.fit(X,y) # # 使用pickle保存模型到文件中 # with open('save/model.pickle','wb') as fp: # pickle.dump(model,fp)# 從文件中load模型 with open('save/model.pickle', 'rb') as fp:model_read = pickle.load(fp)# 使用load出的模型預測 print(model_read.predict(X[0:1]))10.使用joblib保存模型到文件
from sklearn.datasets import load_iris from sklearn.svm import SVC # 導入外部模塊中得joblib用于存儲模型 from sklearn.externals import joblibiris = load_iris() X = iris.data y = iris.target# # 使用SVC模型 # model = SVC() # # 訓練模型 # model.fit(X,y) # # 使用joblib存放模型到model.jl中 # joblib.dump(model,'save/model.jl')# 從model.jl中讀取模型 model_read = joblib.load('save/model.jl') # 用load的模型預測 print(model_read.predict(X[0:1]))轉載于:https://www.cnblogs.com/leokale-zz/p/11032550.html
總結
以上是生活随笔為你收集整理的scikit-learn学习笔记-bili莫烦的全部內容,希望文章能夠幫你解決所遇到的問題。