SKlearn通用機器學習模塊 全攻略

選擇學習方式

SKlearn的官網
https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
在這裏插入圖片描述

用sklearn準備數據

導入數據

導入模塊

from sklearn import datasets #導入數據集模塊

數據導入

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

在這裏插入圖片描述

將數據分成訓練集和測試集

from sklearn.model_selection import train_test_split#引入相應的模塊

X_train, X_test, y_train, y_test = train_test_split(
    iris_X, iris_y, test_size=0.3)             #將數據集分爲訓練集和測試集    其中 test_size=0.3,即測試集佔總數據的 30%

數據標準化

from sklearn import preprocessing #引入相應的模塊

X = preprocessing.scale(X)#按照默認參數壓縮

X = preprocessing.minmax_scale(X,feature_range=(-1,1))  # 壓縮數據到-1,1的範圍裏

創造數據

創造不同分類數據

    # 生成數據
    from sklearn.datasets import make_classification
    X, y = make_classification(n_samples=10000,        # 樣本個數
                               n_features=25,          # 特徵個數
                               n_informative=3,        # 有效特徵個數
                               n_redundant=2,          # 冗餘特徵個數(有效特徵的隨機組合)
                               n_repeated=0,           # 重複特徵個數(有效特徵和冗餘特徵的隨機組合)
                               n_classes=3,            # 樣本類別
                               n_clusters_per_class=1, # 簇的個數
                               random_state=0)

創造線性數據

#製作數據 樣本量 x多少個 y多少個 噪聲大小
X, y = datasets.make_regression(n_samples=100, n_features=2, n_targets=1, noise=10)

在這裏插入圖片描述

數據增加維度特徵

from sklearn.preprocessing import  PolynomialFeatures
model = PolynomialFeatures(degree=2)
data = model.fit_transform(x)

導入模型

導入模塊

https://sklearn.apachecn.org/

#引入模塊,引入什麼樣的模型就引入哪個模塊
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier() #接收模型

在這裏插入圖片描述
在這裏插入圖片描述

訓練模型

model.fit(data_X, data_y)#訓練模型

模型信息、評分、預測

預測數據

print(model.predict(data_X[:4, :]))#輸出模型驗證結果(model是生成的模型)

打印評價

print(model.score(data_X, data_y)) # 打印對模型訓練結果的評價

打印斜率、斜距、參數信息

print(model.coef_)#打印(斜率)
print(model.intercept_)#打印斜距
print(model.get_params())#打印模型參數

模型調優

交叉驗證

from sklearn.model_selection import cross_val_score#導入相應模塊

scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')#(模型/訓練集/測試集/分成多少輪/驗證方法)
print(scores)#打印不同次數的正確率
print(scores.mean())#打印正確率平均數

迭代交叉驗證

from sklearn.model_selection import cross_val_score#導入相應模塊

k_range = range(1, 31)#參數範圍
k_scores = []
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)#模型
    scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy') #交叉驗證(模型/數據/標記/test分成多少輪/驗證方法)
    k_scores.append(scores.mean())

#可視化數據
plt.plot(k_range, k_scores)
plt.xlabel('Value of K for KNN')#x軸標註
plt.ylabel('Cross-Validated Accuracy')#y軸標註
plt.show()

損失率

from sklearn.model_selection import cross_val_score#導入相應模塊

loss = -cross_val_score(knn, X, y, cv=10, scoring='neg_mean_squared_error')#交叉驗證(模型/數據/標記/test分成多少輪/驗證方法)
print(loss)#打印不同次數的正確率
print(loss.mean())#打印正確率平均數

迭代損失率

from sklearn.model_selection import cross_val_score#導入相應模塊

k_range = range(1, 31)#參數範圍
k_scores = []
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)#模型
    loss = -cross_val_score(knn, X, y, cv=10, scoring='neg_mean_squared_error')#交叉驗證(模型/數據/標記/test分成多少輪/驗證方法)
    k_scores.append(loss.mean())

#可視化數據
plt.plot(k_range, k_scores)
plt.xlabel('Value of K for KNN')#x軸標註
plt.ylabel('Cross-Validated MSE')#y軸標註
plt.show()

繪製學習曲線

from sklearn.model_selection import learning_curve #學習曲線模塊

#訓練輪數,訓練誤差,測試誤差|||||||/模型/訓練集/標記/test分成多少輪/驗證方法/分別在那幾個地方記錄參數
train_sizes, train_loss, test_loss = learning_curve(
    SVC(gamma=0.001), X, y, cv=10, scoring='neg_mean_squared_error',
    train_sizes=[0.1, 0.25, 0.5, 0.75, 1])          
#可視化
import matplotlib.pyplot as plt 

train_loss_mean = -np.mean(train_loss, axis=1)
test_loss_mean = -np.mean(test_loss, axis=1)
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("Training examples")
plt.ylabel("Loss")
plt.legend(loc="best")
plt.show()

繪製某個參數對模型影響曲線

from sklearn.model_selection import validation_curve #學習曲線模塊

#建立參數測試集
param_range = np.logspace(-6, -2.3, 5)

#使用validation_curve快速找出參數對模型的影響
#訓練誤差,測試誤差|||||||/模型/訓練集/標記/參數名稱/參數取值範圍/test輪數/驗證方法
train_loss, test_loss = validation_curve(
    SVC(), X, y, param_name='gamma', param_range=param_range, cv=10, scoring='neg_mean_squared_error') #修改gamma參數進行在範圍內調整

#平均每一輪的平均方差
train_loss_mean = -np.mean(train_loss, axis=1)
test_loss_mean = -np.mean(test_loss, axis=1)

#可視化
from sklearn.model_selection import learning_curve #學習曲線模塊

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.legend(loc="best")
plt.show()

保存模型 和 讀取模型

pickle模塊

import pickle #pickle模塊

#保存Model(注:save文件夾要預先建立,否則會報錯)
with open('save/clf.pickle', 'wb') as f:
    pickle.dump(clf, f)

#讀取Model
with open('save/clf.pickle', 'rb') as f:
    clf2 = pickle.load(f)
    #測試讀取後的Model
    print(clf2.predict(X[0:1]))

# [0]

jbolib模塊

#分佈式保存讀取,速度更快
from sklearn.externals import joblib #jbolib模塊

#保存Model(注:save文件夾要預先建立,否則會報錯)
joblib.dump(clf, 'save/clf.pkl')

#讀取Model
clf3 = joblib.load('save/clf.pkl')

#測試讀取後的Model
print(clf3.predict(X[0:1]))

# [0]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章