1.sklearn全名scikit-learn,在pycharm中添加时应搜索全名,是基于python语言的机器学习工具包。本文sklearn版本为1.1.2,使用其提供的一些功能进行实现回归预测、分类等任务。
2.pandas是另一个在数据处理中十分重要的库,通过它可以维护一个表格,储存需要的数据,就像Excel表格一样。其中只有一个维度的数据结构是Series,二维是DataFrame。简单的回归学习中,自变量值可以是二维的,因变量往往只是一维。如下图前四列(“ch1”至“ch4”列)可作为自变量,最后一列为因变量。每行的四个自变量对应着最后一个因变量。这个表格的数据有统计工作得来,其内在关系则是我们要进行探索的。
ch1 | ch2 | ch3 | ch4 | y | |
0 | 1.1 | 0.1 | 10 | 23 | 1 |
1 | 2.2 | 0.2 | 20 | 45 | 2 |
2 | 3.3 | 0.3 | 39 | 34 | 3 |
3 | 4.4 | 0.4 | 39 | 23 | 4 |
4 | 5.5 | 0.5 | 54 | 23 | 5.5 |
5 | 6.6 | 0.5 | 34 | 54 | 6 |
6 | 7.7 | 0.5 | 231 | 3 | 7 |
7 | 8.8 | 0.5 | 43 | 45 | 8 |
8 | 9.9 | 0.8 | 23 | 2 | 9 |
sklearn等第三方库通过提供函数和类简化编写程序时的工作,要实现某项功能只需要引用相应函数即可。
本文展示由sklearn实现的过程逻辑回归、支持向量机回归、决策树、多层感知机、自适应提升、线性回归、线性判别、K邻近回归·、朴素贝叶斯、随机森林、极端树、梯度提升算法。导入相关函数代码如下
# 以下为回归方法
from sklearn.svm import SVR # 支持向量机回归
from sklearn.ensemble import AdaBoostRegressor # 自适应提升回归
from sklearn.ensemble import RandomForestRegressor # 随机森林回归
from sklearn.ensemble import ExtraTreesRegressor # 极端树回归
from sklearn.ensemble import GradientBoostingRegressor # 梯度提升回归
from sklearn.linear_model import Ridge # 岭回归
from sklearn.linear_model import Lasso # Lasso回归
from sklearn.linear_model import ElasticNet # 弹性网回归
from sklearn.linear_model import LassoLars # LassoLars回归
from sklearn.linear_model import BayesianRidge # 贝叶斯岭回归
from sklearn.linear_model import LinearRegression # 线性回归
from sklearn.tree import DecisionTreeRegressor # 决策树回归
from sklearn.neural_network import MLPRegressor # 多层感知机回归
# 以下为分类方法
from sklearn.linear_model import LogisticRegression # 逻辑回归
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis # 线性判别
from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯分类
亦可通过其他方法导入,如直接导入sklearn,每次通过打点访问到下属的类或函数。在上述代码中sklearn之后通过点连接的均为sklearn的类,我们从这些类中导入了其中下一级的类。
值得注意的是逻辑回归是一个分类方法。其实名字并不重要,重要的是它以及后两个分类方法在训练时,训练集的y值需要是整数。而回归可以是任意实数。通过下方代码,将一个Series转为整型。
y_test.astype('int')
对于回归和分类,主要任务是通过已有数据,训练好一个模型,并将这个模型应用于一些知道自变量的数据上,来预测其因变量值或分类结果。这是典型的监督学习。
注意,上文刚刚导入了一些用于机器学习的类。从面向对象编程的角度出发,此时应实例化一些类,以进行下一步工作。这个实例化的过程就是创建一些空白的模型,这些模型还没有被训练。实例化的指令很简单,只需给出一个名字即可:
model_1=LinearRegression()
model_1就是新建好的支持向量机回归模型,同理我们可以实例化其他空白的机器学习模型。
训练的命令也很简单,通过打点的方式,访问类中函数即可。至于函数是怎么实现的,每个模型有着不同算法,这是偏向数学与数理统计的内容,此处不做介绍。
fit()函数可以帮助我们训练大多数模型,几乎所有模型都有这个函数。其传入的参数依次为自变量和因变量。训练好的模型,可以通过predict函数进行预测的工作,只需传入自变量。
x_train = np.array([1,2,3,4,5,6]).reshape(-1,1)
y_train = np.array([4,5,6,7,8,9]).reshape(-1,1)
x_test= np.array([7,8]).reshape(-1,1)
model_1.fit(x_train,y_train)
model_1.predict(x_test)
此时,最后一句函数会返回预测值如下。
[[10.]
[11.]]
应注意部分模型对输入值的形式有着特殊要求,如分类模型y必须为整数等,需要进行特殊的数据预处理。
对于sklearn学习得到的模型,可以使用第三方库joblib进行保,通过下方代码可以将训练好的线性回归模型保存为同目录下的pkl文件。
import joblib
joblib.dump(model_1,'model01.pkl')
在另一个python文件中导入joblib可以带入模型。
import joblib
model=joblib.load('model01.pkl')
此时得到的model即为刚刚训练好的模型,在新的文件中无需导入sklearn即可使用其进行预测以及其他操作。