线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。初次接触“线性回归”这个词,我们可以把它分开来看,其中“线性”表示线性模型,而“回归”则表示回归问题,也就是用线性模型来解决回归问题。
预测方法
预测方法
预测的结果是明确的几类时,使用决策树。
例1: 根据气象数据预测天气是晴、雨、阴、雾、霾哪种情况。
例2: 根据交通数据预测交通是否拥堵。
预测的结果一系列连续的值时,使用线性回归方法。
例1: 根据海拔高度预测温度。
例2: 根据父亲身高预测孩子身高。
小结
线性回归的预测方法和决策树是相似的:
- 先分析数据,找出特征和结果之间的关系
- 再根据它们的关系进行预测
- 最后不断地调试参数,使预测的结果更加准确
线性回归方法
前提条件
特征和结果之间,需要是线性关系的。
线性关系
如果两级数据在散点图上呈现出一条直线的样子,那么它们具有线性关系。
预测步骤
- 分析特征和结果之间的关系
- 使用数学表达式进行预测
- 计算平均误差,根据平均误差调试参数
- 确定最终的预测表达式
>> 可以优先从倍数关系入手
>> 预测的结果可能是有误差的
>> 只看一条数据或者几条数据的误差不够全面
>> 下半场误差越小,预测的越准确
调参方向
通过不断地调整数学表达式中的数字,使平均误差逐渐变小的过程叫做调参;调整的数字在人工智能中也称作参数。
调参时,如果误差变大,说明调整的方向不对,那就要往相反的方向调整,只要误差一直在变小,就说明调整的方向是正确的,直到误差的值不能再继续减小为止。
应用举例
帮助玩具店老板预测销售额
玩具店老板记录的人流量和销售额存储在记录.csv
中
记录.csv中选择一条数据,比如第一条,可以看到,当人流量是10时,销售额是120, 120除以10等于12。
可以使用表达式 销售额=12*人流量
进行预测
import pandas
data = pandas.read_csv('记录.csv')
people = data['人流量']
pre_sale = []
real_sale = data['销售额']
for x in people:
#调整参数,减小误差
y = 12 * x #使用数学表达式进行预测
pre_sale.append(y)
num = len(pre_sale)
s = 0
for i in range(num):
if pre_sale[i] >= real_sale[i]:
s += pre_sale[i] - real_sale[i]
else:
s += real_sale[i] - pre_sale[i]
print('平均误差', s / sum)
#计算平均误差,根据平均误差调试参数
确定最终的预测表达式 (当平均误差最小时)
注意事项
计算平均误差时,当预测值大于等于真实值时,误差是用预测值减去真实值,否则用真实值减去预测值。
搞定联欢会
预测活动费用
观察数据,选择预测方法
活动费用数据中有人数和费用两列,其中,人数是特征列,费用是结果列
费用是很多不同的数值,预测费用可以使用线性回归
使用线性回归的前提—特征和结果必须有线性关系。
观察散点图,可以看出来,人数和费用之间有线性关系,可以使用线性回归预测费用。
探索: 结果与特征的关系
生活中的大多数情况,都不刚好是倍数关系,而是几位多几的关系。通过数据,我们很难知道特征与结果是不是倍数关系,所以一般都会几倍多几的形式。
预测结果=参数1*特征+参数2
费用和人数的关系,是几倍多几的关系
费用=参数1*人数+参数2
探索:调参
费用=参数1*人数+参数2
需要调整这两个参数,使误差尽可能的小
参数初始值
初始的时候,这两个参数都可以随便取一个值,因为无论参数的初始值是多少,根据误差不断调整,都可以找到最好的值。
小技巧
参数1:查看数据,从数据中任意取一条,计算出结果与特征的倍数,然后把这个倍数作为参数1的初始值。
参数2:可以选取一个自己喜欢的数字作为初始值。
调参方法
在每次调参之前,需要先把四周的误差都看一看。
原则:哪里误差低就向哪里走
调参流程图
调参小口诀
想要预测得准确,误差最小是秘诀
如何可使误差小,不断调参少不了
要问参数怎么调,比较误差很重要
看看自己和四周,哪里最小向哪走
直到周围大数绕,最小误差就找到
足迹的秘密
选择特征
身高是连续的数据,可以使用线性回归的方法来预测。
使用线性回归的前提是:特征与结果之间是线性关系。
当有多个特征时,可以画出每个特征与结果的散点图,然后选择与结果是线性关系的特征。
观察散点图,发现有2个特征与结果是线性关系:鞋印长度、步长
为了预测更准,我们使用这两个特征来进行预测。
编写关系式
选择特征后,进行预测的3个步骤:
- 编写关系式
- 计算误差
- 调参,减小误差
只有1个特征与结果是线性关系时,关系式:
有2个特征与结果是线性关系时,关系式:
鞋印长度和步长2个特征都与身高是线性关系,所以预测小偷身高的关系式是
计算出预测值和真实值之间的平均误差
在for循环中,依次取出预测身高和实际身高,计算它们的差值,累加起来,最后用累加的差值除以数据量,就能得到平均误差。
s=0
for i in range((len(predict))):
if height[i] > prdict[i]:
s += height[i] - prdict[i]
else:
s += predict[i] - height[i]
s = s/len(predict)
通过调整3个参数的值,减小关系式的误差。
只有1个特征时,通过计算a增加、a减小、b增加、b减小这4个方向的误差来决定调参方向
有2个特征时,则通过计算a增加、a减小、b增加、b减小、c增加、c减小这6个方向的误差来决定调参方向
工具书
编写代码时,可以打开左则文件夹中的工具书,查找所需函数的用法。