机器学习实战(七)—线性回归问题

线性回归

线性回归是利用数理统计中回归分析来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法

线性回归利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况叫做多元回归

使用形如 y = w T x + b y=w^Tx+b y=wTx+b 的线性模型拟合数据输入和输出之间的映射关系

线性回归的实际用途

如果目标是预测或者映射,线性回归可以用来对观测数据集的 y y y x x x 的值拟合出一个预测模型,当完成这样一个模型后,对于一个新的 x x x,可以通过这个模型预测出 y y y 值。

线性回归实战

对房屋成交信息建立回归方程,并根据回归方程对房屋价格进行预测

数据集(部分截取)如下(每一行第一个数据代表房屋面积,第二个数据代表房屋价格):
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
 
 
# 读取数据集
datasets_X = []
datasets_Y = []
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
    items = line.strip().split(',')
    datasets_X.append(int(items[0]))
    datasets_Y.append(int(items[1]))
 
length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length,1])
datasets_Y = np.array(datasets_Y)
 
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
 
 
linear = linear_model.LinearRegression()
#回归模型建立
linear.fit(datasets_X, datasets_Y)
#模型训练,拟合数据
 
# 图像中显示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, linear.predict(X), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()

通过回归方程拟合的直线与原有数据点的关系如下所示:
在这里插入图片描述

多项式回归

多项式回归是研究一个因变量与一个或多个自变量间多项式的回归分析方法。如果自变量只有一个,称为一元多项式回归,如果自变量有多个,称为多元多项式回归。

在一元回归分析中,如果因变量 y y y 与自变量 x x x 的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。

多项式回归的最大优点就是可以通过增加 x x x的高次项对实测点进行逼近,直到满意为止。

事实上,多项式回归可以处理相当一类非线性问题,它在回归分析中占有重要的地位,因为任意函数都可以分段用多项式来逼近。

不同于线性回归,多项式回归是使用曲线拟合数据的输入与输出的映射关系。

多项式回归实战

对房屋数据集进行多项式回归,达到更好的拟合效果

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
 
 
# 读取数据集
datasets_X = []
datasets_Y = []
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
    items = line.strip().split(',')
    datasets_X.append(int(items[0]))
    datasets_Y.append(int(items[1]))
 
length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length,1])
datasets_Y = np.array(datasets_Y)
 
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
 
 
poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(datasets_X)
lin_reg_2 = linear_model.LinearRegression()
lin_reg_2.fit(X_poly, datasets_Y)
 
# 图像中显示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, lin_reg_2.predict(poly_reg.fit_transform(X)), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值