初识机器学习------线性回归

1.线性回归的拟合
首先我在 data.csv中写了几条数据,判断 id 和 money 之间的关系
在这里插入图片描述
将他制作成散点图
在这里插入图片描述
在这里插入图片描述
这个图,很容易让我们想到它是否满足某种函数关系,下面分别看看它和一次,二次函数的拟合度
计算一次函数的各项系数
在这里插入图片描述
看图或许会更形象
在这里插入图片描述
在这里插入图片描述

我们看到,这个曲线和散点已经非常接近了,那是不是就是他的函数关系呢?
先不急下结论,我们再看看二次函数
和上面的构造方法类似
在这里插入图片描述
如出一辙,其实只是加了二次项系数,看图
在这里插入图片描述
这个貌似更接近了
当然我们凭感觉是不准确的,错觉是存在的
所以我们通过实验来证明

 np.corrcoef()  测试拟合度

在这里插入图片描述
因为0.9998>0.987 所以二次函数比一次函数更适合这组数据
即 result2 这个模型更好
还可以利用模型摘要比较

   result.summary()
   result2.summary()

在这里插入图片描述
一次和二次
在这里插入图片描述
注意这些参数

   R-squared:判定系数,或者称为拟合度,其值范围是[ 0, 1] ,值越大,表示模型拟合的越好
   coef:显示的是 b 和 k 的系数
   std err:相应系数的标准差

注意:虽然前面数据都表明第二个比第一个模型好,但我们还没有检测 “残差”
残差图的纵坐标就是残差 ,通过残差图观察
如果残差图是 “可预测的” ,那么就说明该函数不能反映数据规律
在这里插入图片描述
在这里插入图片描述
这里由于数据较少,不够直观,但这种方法是可行的。
下面我们看另一种方法,这里构造了大量数据

2.scikit-learn的工具
著名的机器学习库 scikit-learn 提供了一个工具-------LinearRegression
(1)普通最小二乘法
先构造一些数据
在这里插入图片描述
尽管我们已经知道函数关系式了,但为了检测,所以假装不知道
引入这个类
在这里插入图片描述
它有一些参数

     LinearRegression():是用OLS方法来完成线性回归的
     fit_intercept:是否计算常数项,默认为True;如果为False,则不计算
     normalize:默认为False。如果为False,则此参数被忽略
     copy_X:s默认为True, 此时训练集数据会被复制; 若为Fslse,则会把原训练集数据覆盖
     coef_:以数组形式返回变量的系数
     intercept_:以数组形式返回截距

求各项系数
其实到这里系数已经出来了,只不过我们看不到,将它打印出来并检测
在这里插入图片描述
同样的,必不可少的一部分,绘制残差图并观察
在这里插入图片描述
在这里插入图片描述
毫无疑问,残差是不可预测的,所以这个模型是正确的

(2)多项式函数 (关键)
上面的讨论只是针对一次函数,如果是多项式呢,这里用另一个方法创建

     PolynomialFeatures( degree=2, interaction_only=False, include_bias=True)

参数解释

  degree: 整数,默认为2,表示多项式最高阶的次数。
  interaction_only: 默认为False。如果为True, 则变量会产生交叉。
  include_bias: 默认为True。通常线性函数表达式中都要有常数项,默认所创建的多项式也有常数项,并且是1,
  通过训练得到其系数。如果 include_bias=False,则常数项为0.

在这里插入图片描述
结果不难理解,分别是2,3,4的0,1,2,3次方
再看一个有交叉项的例子
在这里插入图片描述

函数解释到此结束,接着划分数据并进行拟合测试
在这里插入图片描述
是一个正弦函数
在这里插入图片描述
最终我们发现这个一元六次函数和正弦函数拟合度很高

当然我们需要用残差图来检验,和上面步骤一样,结果也一样是不可预测的,此处省略
我们用另一个方法验证

      import  math
      math.sin(math.pi/2)
      
      1.0

      model.predict([[math.pi/2]])
      array( [1.0199] )

这样也可以验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值