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]