发布时间:2024-03-14 16:30:01
Scikit-learn 简称 sklearn 是基于 Python 语言实现的机器学习算法库,它包含了常用的机器学习算法,比如回归、分类、聚类、支持向量机、随机森林等等。同时,它使用 NumPy 库进行高效的科学计算,比如线性代数、矩阵等等。提示:Scikit-learn 官方网站:https://scikit-learn.org/stable/
Scikit-learn 涵盖了常用的机器学习算法,而且还在不断的添加完善,对于本教程所涉及的机器学习算法它都做了良好的 API 封装,以供直接调用。你可以根据不同的模型进行针对性的选择。下面介绍 sklearn 中常用的算法库:from sklearn import linear_model其次训练线性回归模型。使用 fit() 喂入训练数据,如下所示:
model = linear_model.LinearRegression() model.fit(x, y)最后一步就是对训练好的模型进行预测。调用 predict() 预测输出结果, “x_”为输入测试数据,如下所示:
model.predict(x_)你可能会感觉 so easy,其实没错,使用 sklearn 算法库实现线性回归就是这么简单,不过上述代码只是一个基本的框架,要想真正的把这台“机器”跑起来,我们就得给它喂入数据,因此准备数据集是必不可少的环节。数据集的整理也是一门专业的知识,会涉及到数据的收集、清洗,也就是预处理的过程,比如均值移除、归一化等操作,如果熟悉 Pandas 的话应该了解, 因此这里不做重点讲解。
# 使用numpy准备数据集 import numpy as np # 准备自变量x,-3到3的区间均分间隔30份数 x = np.linspace(3,6.40) #准备因变量y,这一个关于x的假设函数 y = 3 * x + 2
#使用matplotlib绘制图像,使用numpy准备数据集 import matplotlib.pyplot as plt import numpy as np from sklearn import linear_model #准备自变量x,生成数据集,3到6的区间均分间隔30份数 x = np.linspace(3,6.40) #准备因变量y,这一个关于x的假设函数 y = 3 * x + 2 #由于fit 需要传入二维矩阵数据,因此需要处理x,y的数据格式,将每个样本信息单独作为矩阵的一行 x=[[i] for i in x] y=[[i] for i in y] # 构建线性回归模型 model=linear_model.LinearRegression() # 训练模型,"喂入"数据 model.fit(x,y) # 准备测试数据 x_,这里准备了三组,如下: x_=[[4],[5],[6]] # 打印预测结果 y_=model.predict(x_) print(y_) #查看w和b的 print("w值为:",model.coef_) print("b截距值为:",model.intercept_) #数据集绘制,散点图,图像满足函假设函数图像 plt.scatter(x,y) plt.show()通过线性回归得到的线性函数图像,如下所示:
测试集输出结果: [[14.] [17.] [20.]] w值为: [[3.]] b截距值为: [2.]通过上述代码我们就实现“线性回归”的过程,但是在实际情况中,我们要面临的数据集要复杂的多,绝大多数情况不会这样理想,都会存在一些波动。在生成数据集的代码段内添加以下代码,如下所示:
#准备自变量x,生成数据集,3到6的区间均分间隔30份数 x = np.linspace(3,6.40) #准备因变量y,这一个关于x的假设函数 y = 3 * x + 2 # 添加代码,扰乱点的分布 x = x + np.random.rand(40)利用 NumPy 的 random. rand() 随机生成 0 - 1 之前的波动数值,从而改变数据点的分布情况,如下所示:
w值为: [[2.68673744]] b截距值为: [0.80154335]绘制最佳拟合直线,程序代码如下:
#使用matplotlib绘制图像,使用numpy准备数据集 import matplotlib.pyplot as plt import numpy as np from sklearn import linear_model #准备自变量x,生成数据集,-3到3的区间均分间隔30份数 x = np.linspace(3,6,40) #准备因变量y,这一个关于x的假设函数 y=3 * x + 2 x = x + np.random.rand(40) #准备因变量y,这一个关于x的假设函数 #由于fit 需要传入二维矩阵数据,因此需要处理x,y数据格式,将每个样本信息单独作为矩阵的一行 x=[[i] for i in x] y=[[i] for i in y] model=linear_model.LinearRegression() model.fit(x,y) #准备测试数据 x_,这里准备了三组,如下: x_=[[4],[5],[6]] # 打印预测结果 y_=model.predict(x_) print(y_) #查看w和b的 print("w值为:",model.coef_) print("b截距值为:",model.intercept_) #数据集绘制,散点图,图像满足函假设函数图像 plt.scatter(x,y) #绘制最佳拟合直线 plt.plot(x_,y_,color="red",linewidth=3.0,linestyle="-") plt.legend(["func","Data"],loc=0) plt.show()函数图像如下所示: