ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

5.线性回归算法 4/20

2020-04-20 23:05:38  阅读:270  来源: 互联网

标签:plt 20 回归 算法 values 线性 data 单价


1.本节重点知识点用自己的话总结出来,可以配上图片,以及说明该知识点的重要性

 · 我们先了解回归算法:

      

 · 课上老师举了线性回归的应用:①房价预测;②销售额预测;③贷款额度预测;

   我们可以发现做线性回归,需要的数据都应该为连续型,最终要预测的因素成为目标值,把影响的因素成为特征;如果影响的因素只有一个,那么这就是一个单线性回归,如果有多个影响因素,那就是一个多线性回归。

  ★ 我认为这里有一个重要的知识点就是:线性回归的数据应该是连续型的,如果拿到的数据如下图红色标点,那便不符合线性回归模型。

 

       

   · 线性回归模型:

      

   (1)如果是一个变量,那就是二维空间;多个变量就是三维空间。

  ★(2)线性回归问题可以转换为矩阵乘积问题,矩阵在线性回归中扮演一个重要的角色。矩阵的计算正好满足线性回归的要求,所以矩阵的计算也是一个重点知识:

     ①数组与矩阵的特性与区别:

     

     ②用代码比较数据和矩阵相乘的结果:

      

  ·  机器学习需要迭代算法来减少误差,这里引入一个 损失函数(误差的大小);学习的目的,就是将损失函数最小化:

      

 

    减少误差的方法(优化线性回归的策略):

      ①正规方程:

          

 

     ★②梯度下降法:

          

    ∂为学习速率,学习速率的取值取决于数据样本。机器进行学习,多次迭代,如果损失函数在变小,说明结果越准确,取值准确。

    关于梯度下降的具体概念可以参考:https://www.cnblogs.com/jwwzone/p/12684355.html的第二题。

 梯度下降代码:

# 梯度下降
import random
import time
import matplotlib.pyplot as plt

# 产生数据
_xs = [0.1 * x for x in range(0, 10)]
_ys = [12 * i + 4 for i in _xs]
print(_xs)
print(_ys)

w = random.random()
b = random.random()

a1 = []
b1 = []
for i in range(100):
    for x, y in zip(_xs, _ys):
        o = w * x + b  # 预测值
        e = (o - y)  # 误差
        loss = e ** 2  # 损失
        dw = 2 * e * x  # 对w求导
        db = 2 * e * 1  # 对d求导
        # 梯度下降,0.1为学习率
        w = w - 0.1 * dw
        b = b - 0.1 * db
        # 最终结果:loss越小越好,w接近12,b接近4
        print('loss={0},w={1},b={2}'.format(loss, w, b))
    a1.append(i)
    b1.append(loss)
    plt.plot(a1, b1)
    plt.pause(0.1)

plt.show()

 

2.思考线性回归算法可以用来做什么?(大家尽量不要写重复)

  可以用于:

  (1)家庭家电的预测:①时间与功率之间的关系;②时间与电压之间的多项式关系。

  (2)医学上可以预测年龄和血压的关系。

  (3)预测一个发展的电信市场的网络容量。

 

3.自主编写线性回归算法 ,数据可以自己造,或者从网上获取。(加分题)

   数据是我以前爬虫的广州市二手房数据,前几天爬了一次被抓到了哈哈。

   数据如下(获取单价和总价作为数据样本):    

       

   用单价来预测总价,可视化结果如下:

      

    我们可以看到预测值和真实值还是比较接近的,这说明用单价来预测总价还是比较靠谱的。从模型的权值也可以看出,预测结果相对准确:

                   

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('house.csv', index_col=0)  # 读取数据

# 线型回归
from sklearn.linear_model import LinearRegression

regr = LinearRegression()  # 构建模型
regr.fit(data[['单价']].values, data['总价'])
print('权值:', regr.coef_, '截距:', regr.intercept_)
plt.plot(regr.predict(data[['单价']].values), linewidth=1.7, linestyle='-', color='#A6CEE3')  # 预测结果
plt.plot(data[['总价']].values, linewidth=1.7, linestyle='-', c='#FDBF6F')

# 可视化处理
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.legend(['真实值', '预测值'])
plt.title('广州市二手房价格线型回归模型预测结果')
plt.show()

   我们也可以画出单价和总价呈线性关系的可视化视图:

      

plt.scatter(data['单价'].values, data['总价'].values)
plt.plot(data[['单价']].values, regr.predict(data[['单价']].values), c='r')
plt.title('广州市二手房价格与单价散点图')
plt.xlabel('单价')
plt.ylabel('总价')
plt.show()

标签:plt,20,回归,算法,values,线性,data,单价
来源: https://www.cnblogs.com/jwwzone/p/12740070.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有