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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章