机器学习之回归模型-调用sklearn库求解线性回归
在使用sklearn库之前,我们先看一下这个库的结构,该库经常用于监督学习和无监督学习,sklearn共分为6大部分,分别用于完成分类任务,回归任务,聚类任务,降维任务,模型选择以及数据的预处理。由图中,可以看到库的算法主要有四类:分类,回归,聚类,降维。其中:
常用的回归:线性、决策树、SVM、KNN ;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
常用的分类:线性、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN
常用降维:LinearDiscriminantAnalysis、PCA
我是使用pychram工具实现的,在调用库之前需要下载安装该库到本地,下载安装方法如下所示:
1-选择文件,点击设置
2-选择project interpreter,点击右上角的“+”号,然后确定
3-在搜索栏输入sklearn,选中该库,点击install Package,等待就可以,等待时间有点久,不用着急。。。
4-安装成功会提示install successful,回到project interpreter也可以查看到sklearn库。
代码如下:
就是利用机器学习库sklearn中训练好的模型去计算参数w,b,然后带入求出损失函数,使得损失函数最小,拟合的更好。
demo同步上传到github,包含代码和数据集,链接如下:
https://github.com/wgdwg/-sklearn-
#使用机器学习库sklearn求解线性回归
import numpy as np #导入计算包
import matplotlib.pyplot as plt #导入绘图包
#1.加载数据源,并画出散点图
points = np.genfromtxt('data.csv', delimiter=',')
#提取points的两列数据,分别作为x,y
x = points[:,0] #第一列数据
y = points[:,1] #第2列数据
#用plt画出散点图
plt.scatter(x,y)
plt.show()
#2.定义损失函数,损失函数是系数的函数
def cost_function(w, b, points):
total_const = 0 #初始化损失函数
m = len(points) #数据个数
#逐点计算平方误差,然后求平均数
for i in range(m):
x = points[i,0] #第i行,第1列
y = points[i,1] #第i行,第2列
total_const += (y - w * x - b) ** 2
return total_const / m
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
x_new = x.reshape(-1,1) #改造成n行1列的二维数组
y_new = y.reshape(-1,1)
lr.fit(x_new,y_new) #拟合
#从训练好的模型中提取系截距
w = lr.coef_[0][0]
b = lr.intercept_[0]
cost = cost_function(w,b,points)
print("参数w = ", w)
print("参数b = ", b)
print("损失函数 = ", cost)
plt.scatter(x,y)
pred_y = w * x + b
plt.plot(x, pred_y, c = 'r')
plt.show()
控制台运行结果如下:我们会发现这个损失函数与最小二乘法求出来的损失函数更接近一点。
散点图和拟合直线如下:
注:关于sklearn库的使用和numpy库的使用,推荐几篇好的博文!!!
戳这里,去看Numpy 和 sklearn库的使用 !
戳这里,去看sklearn的快速使用!!!