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]