0
点赞
收藏
分享

微信扫一扫

【机器学习】一元线性回归

1.一元线性回归是学习机器学习的基础部分。通常的问题模型是:问题的结果一般只有一个因素影响(怎么可能在现实的生活中找到这么简单的问题???)并且和这个因子成近似线性的关系。我们可以通过线性回归来找到这条回归直线,进而可以预测到下一步的结果。由于我们需要把数据可视化掉,所以我们还是先看看基本的可视化数据的一些东西。

(1)首先这是我们的数据:可以自己造数据

                                 【机器学习】一元线性回归_数据

(2)我们要把这些数据读出来,使用numpy读取数据:

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
data=np.genfromtxt("D:/ML/data.csv",delimiter=',')
x_data=data[:,0]
y_data=data[:,1]

当然了,一般都是pandas和numpy结合使用来实现数据的载入:

#pandas读取以及写入文件
import pandas as pd
file=pd.read_csv("D:/ML/data.csv")
print(file)
修改后b保存
file.iloc[2,0]=0
file.to_csv("D:/ML/newdata.csv")

(3)读取数据之后,我们需要画图显示数据,先学习一下基本的画图功能。画图我们使用matplotlib这个包中的plot。

#图像
import matplotlib.pyplot as plt
import numpy as np
import math
x=np.linspace(-3,3,100)
y1=2*x+1
y2=x**2
plt.figure(figsize=(10,10))
plt.plot(x,y1)

plt.figure(figsize=(8,8))
plt.plot(x,y2)
plt.show()

我们可以先用这几行代码来画一下简单的图,比如直线或者曲线等。解释一下这里面的figure,figure是一个画布,如果不创建画布,就会默认的画在一个画布上。当然了,这个图还是很粗糙的,我们可以加一些控制。

#限制坐标的范围
# 这样设置以后就会显示指定坐标范围的图像
plt.xlim((-1,2))
plt.ylim((-2,3))

#对xy的坐标进行描述
plt.xlabel("The x axis")
plt.ylabel("The y axis")
plt.plot(x,y1,color='red')
plt.plot(x,y2,color='blue')
plt.show()

# 散点图
plt.scatter(np.arange(0,4),np.arange(0,4))
plt.show()

x=np.random.normal(0,1,500)
y=np.random.normal(0,1,500)
# 透明度
plt.scatter(x,y,s=50,c='b',alpha=0.5)
plt.show()
#直方图

x=np.arange(10)
y=2**x+10
# 传入数据并且指定颜色
plt.bar(x,y,facecolor='blue')
for x,y in zip(x,y):
plt.text(x,y,'%.2f' %y,ha='center')
plt.show()

好了,有了上边的基础,接下来我们就可以完整的写一个线性回归的代码了。首先我们需要知道线性回归是怎么实现的,这个其实很简单,就是最小二乘法。其实最小二乘法是梯度下降法的一种特殊形式,我们在多元线性回归的分析中使用的也是这种方法,梯度下降法呢,这个需要一定的数学基础,梯度在数学里面一般值的是一个向量,意思就是沿着这个方向,函数的变化是最快的。高数里面其实有着更加严格的定义。不过很好的是,python中有一个skearn库,这里面封装了很多的常用的机器学习算法,我们可以直接调用(PS:这里还是建议不懂梯度下降的小伙伴去学习一下算法原理,如果懂一点高数大概10分钟就看懂了,只会调库是不行滴。)下面就结合着我们上边给出的一个表格中的数据来做一下回归:

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
data=np.genfromtxt("D:/ML/data.csv",delimiter=',')
x_data=data[:,0]
y_data=data[:,1]
# 做出散点图看一下
plt.scatter(x_data,y_data)
# 设置坐标轴
plt.xlabel("Num")
plt.ylabel("Money")
# 给坐标加上维度。
x_data=data[:,0,np.newaxis]
y_data=data[:,1,np.newaxis]
# 创建一个model对象
model=LinearRegression()
# 填充数据
model.fit(x_data,y_data)
# 显示数据绘制图像
plt.plot(x_data,model.predict(x_data),'r')
plt.show()

得到的效果图如下:

【机器学习】一元线性回归_线性回归_02

中间的那条红色的直线就是我们的回归直线。当然了,我们还可以做更加多的工作,比如查看这个直线的方程什么的,使用直线做出预测等。当然了,一元线性回归看上去可能是比较简单,但是回归的思想是很多回归算法的基础。所以初学者还是需要加深理解。

 



举报

相关推荐

0 条评论