速通sklearn库
前言
最近在复习之前学习过的知识点,因此想到把学过的总结一下,方便后面再次复习,所以有了这个系列。
说明
由于标题写的是“速通”,因此我的想法是可以让大家看完这篇文章,可以上手matplotlib库,并且明白怎么去实现自己想要的效果。
有写错误/理解错误的地方,请大家批评指正。有任何问题,欢迎评论区留言,博主看到有空就会回复。
目录结构
文章目录
- 速通sklearn库
- 1. 下载与流程
- 1.1 下载库
- 1.2 使用流程
- 2. 常用的机器学习方法
- 2.1 常用机器学习方法
- 2.2 训练模型方法
- 2.3 模型预测
- 2.4 模型评估
- 2.5 模型的常用方法和属性
- 3. 其它常用方法
- 3.1 划分训练集和验证集
- 3.2 数据标准化
- 3.3 交叉验证
- 3.4 数据归一化
- 3.5 均方误差
- 3.6 自带数据集加载
- 3.7 one-hot编码
- 4. 案例
- 5. 总结
1. 下载与流程
1.1 下载库
sklearn是一个第三方库,其包含了常用的机器学习方法。下载方法:
pip install sklearn
不过,在下载sklearn前,需要下载一些基础的库:
numpy、scipy、matplotlib、pandas
也是通过pip下载。
1.2 使用流程
可以说机器学习案例的使用流程基本上是固定的,常见的流程如下:
1. 导入对应模型
2. 数据处理
3. 创建模型
4. 训练模型
5. 预测、打印、保存参数等后处理操作
对上面的流程进行说明:
- 首先,确定你要用何种机器学习模型,就可以确定导入的方法为何种
- 其次,需要加载原始数据,并进行数据的清洗(降维、划分等等)
- 根据需求,创建出模型,伪代码为
model = xxx()
- 进行训练,这一步的伪代码为
model.fit(x,y)
- 后处理,比如看看训练完毕的模型在测试集上的效果如何,或者保存已经训练好的参数等等。
举个例子,来自我的博客《机器学习案例1:KNN实现鸢尾花分类》,代码如下:
# author: baiCai
# 1. 导包
import sklearn
from sklearn.neighbors import KNeighborsClassifier
from sklearn import model_selection
from sklearn.datasets import load_iris
from matplotlib import pyplot as plt
# 2. 加载数据
data = load_iris()
# print(data) # 返回的字典
# 划分数据集 8:2
x_train,x_test,y_train,y_test = model_selection.train_test_split(data['data'],data['target'],test_size=0.2,random_state=22)
# print(x_train.shape) # 120,4
# print(y_train.shape) # 120,
# # 3. 创建模型
# model = KNeighborsClassifier(n_neighbors=5)
# model.fit(x_train,y_train)
# # 评估
# score = model.score(x_test,y_test)
# print('测试集准确率:',score)
# # 评估2
# y_predict = model.predict(x_test)
# print('测试集对比真实值和预测值:',y_predict == y_test)
# 探究k值影响
model_new = {
KNeighborsClassifier(n_neighbors=2),
KNeighborsClassifier(n_neighbors=3),
KNeighborsClassifier(n_neighbors=4),
KNeighborsClassifier(n_neighbors=5),
KNeighborsClassifier(n_neighbors=6),
KNeighborsClassifier(n_neighbors=7),
KNeighborsClassifier(n_neighbors=8),
KNeighborsClassifier(n_neighbors=9),
KNeighborsClassifier(n_neighbors=10),
}
score_list = []
# 4. 训练模型
for model in model_new:
model.fit(x_train,y_train)
score = model.score(x_test,y_test)
score_list.append(score)
# 5. 后处理
# 画出图形
# 处理中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure()
plt.bar(range(2,11),score_list)
plt.title('不同K值准确率')
plt.show()
# print(score_list)
# 画出训练集
# 处理中文显示问题
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.figure()
# c = ['r','b','g'] # 设置三个颜色
# color = [c[y] for y in y_train] # 为不同的标签设置颜色,比如0--r--红色
# plt.scatter(x_train[:,0],x_train[:,1],c=color)
# plt.title('训练集图')
# plt.xlabel('花萼长')
# plt.ylabel('花萼宽')
# plt.show()
2. 常用的机器学习方法
只要熟悉了sklearn的使用流程,那么你离熟悉它就差了一些方法的了解。这里我们先了解一下常用的机器学习方法所属库、名字以及重要参数
2.1 常用机器学习方法
看下表,是我自己总结的:
模型名字 | 所属库 | 方法名 | 重要参数 |
---|---|---|---|
KNN | sklearn.neighbors | KNeighborsClassifier | n_neighbors指定K值 |
KD树 | sklearn.neighbors | KNeighborsClassifier | algorithm=‘kd_tree’ |
线性回归 | sklearn.linear_model | LinearRegression | |
线性回归 | sklearn.linear_model | SGDRegressor | loss:损失类型 learning_rate 学习率 |
逻辑回归 | sklearn.linear_model | LogisticRegression | |
决策树 | sklearn.tree | DecisionTreeClassifier | criterion=‘gini / entropy’ 指定划分标准 min_samples_split 内部节点划分最小样本数 min_samples_leaf 叶节点最小样本数 max_depth 最大深度 |
支持向量机 | sklearn.svm | SVC LinearSVC | C:正则化因子 kernel: 核函数,RBF/Linear/Poly/Sigmoid degree: 针对多项式核函数,指定次数 |
主成分分析 | sklearn.decomposition | PCA | n_components 整数为输出特征数,小数为保留百分之多说的信息 |
随机森林 | sklearn.ensemble | RandomForestClassifier | n_estimators : 树木数量 Criterion : 默认基尼值 max_depth : 最大深度 oob_score=True 使用没有被选中的数据进行验证 |
XGBoost | xgboost(单独的库) | xgboost | 参数较多,看后面的案例 |
朴素贝叶斯 | sklearn.naive_bayes | MultinomialNB | alpha : 拉普拉斯平滑系数 1.0 |
高斯过程回归 | sklearn.gaussian_process | GaussianProcessRegressor |
比如你要用支持向量机,那么可以按下述代码创建模型:
# 1. 导入模型
from sklearn.svm import SVC
# 2. 创建模型
model = SVC(kernel='rbf')
2.2 训练模型方法
上述方法创建对象后,即可进行模型训练,一般模型训练代码都如下:
model.fit(x_train,y_train)
当然使用的是训练集进行训练。
2.3 模型预测
模型预测非常简单,方法都如下:
y_pred = model.predict(x_test)
返回的就是模型预测值,如果是回归模型则返回的是预测值,如果是分类模型返回的就是概率值。
2.4 模型评估
由于模型的评估有多种标准,因此也有多种方法。不过机器学习方法创建的对象,自带一个通用评估方法,即:
result = model.score(x_test,y_test)
对于分类模型,它返回的就是分类的准确率。对于回归模型,它返回的就是拟合系数R2值(判断模型的拟合好坏)。
而对于其它标准,比如均方误差等,就需要带入具体的方法进行使用。
2.5 模型的常用方法和属性
w参数
coef_: 对应 X 各个特征的系数。
b截距
intercept_: intercept_ 表示模型学习到的截距值。
训练模型
fit(X, y): 训练模型
预测
predict(X): 使用模型进行预测
准确率
score(X, y),返回准确率值 。
预测概率值:分类算法
predict_proba(X): 输出分类概率。
迭代次数
n_iter_:实际迭代次数。
3. 其它常用方法
上面的方法主要是创建模型和训练模型这块的内容,但是还有一大块的内容属于数据处理。
3.1 划分训练集和验证集
方法如下:
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.5, random_state=0)
'''
前两个参数:x和y数据
第三个参数: 测试集的比例
第四个参数: 随机数种子
'''
3.2 数据标准化
方法如下:
from sklearn import preprocessing
# 数据标准化: 即化为均值为0,方差为1的分布
standard = preprocessing.StandardScaler()
# 将训练集和测试集x数据进行表转化
x_train = standard.fit_transform(x_train)
x_test = standard.fit_transform(x_test)
3.3 交叉验证
方式一:
from sklearn.model_selection import cross_val_score
# 创建一个模型
clf = xxx()
# 开始验证:替代了模型的fit和score
scores = cross_val_score(clf, x, y, cv=5)
'''
参数:
clf : 模型
x : 数据集
y : 标签
cv : 指定验证次数,即k折
'''
方式二:针对数据
from sklearn.model_selection import KFold
# 数据
x = [xxxxxx]
# K折
kf = KFold(n_splits=2) # 指定次数
# 划分
for train, test in kf.split(X):
xxx
3.4 数据归一化
方法如下:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler() #实例化
result_ = scaler.fit_transform(data)
'''
参数:
feature_range=[5,10],默认范围[0,1]
'''
3.5 均方误差
用于回归模型的评估,方法如下:
sklearn.metrics.mean_squared_error(y_true, y_pred)
3.6 自带数据集加载
鸢尾花数据集
from sklearn.datasets import load_iris
data = load_iris()
波士顿数据
from sklearn.datasets import load_boston
# 加载数据
data = load_boston()
3.7 one-hot编码
主要用于NLP领域,方法如下:
from sklearn.preprocessing import OneHotEncoder
one_hot = OneHotEncoder(sparse=False)
# 参数: sparse=False,直接返回array对象,否则还需要转为array对象
# 开始转换(只针对y数据,不针对x数据)
y_test1 = one_hot.fit_transform(y_test.reshape(-1, 1))
y_pre1 = one_hot.fit_transform(y_pre.reshape(-1, 1))
4. 案例
这一部分建议直接看我之前的博客,有10个小案例,可以通过我主页的机器学习专栏进入。
5. 总结
sklearn库其实比较简单(我们使用的比较简单),熟悉了固定流程,就只需要机器学习方法名再加上一些数据处理方法就可以套入使用。