机器学习算法--线性回归

这篇博客介绍了线性回归的基本概念、目标及计算方法,通过波士顿房价数据集展示了如何使用Python的Scikit-Learn库实现线性回归模型,并利用梯度下降法求解最优解。文章还提供了数据可视化以分析特征与房价的相关性,并进行了模型训练、预测及评估。
摘要由CSDN通过智能技术生成

线性回归算法学习记录,方便后期复习

线性回归解决问题

对大量的观测数据进行处理,从而得到比较符合事物内部规律的数学表达式。也就是说寻找到数据与数据之间的规律所在,从而就可以模拟出结果,也就是对结果进行预测。解决的就是通过已知的数据得到未知的结果。例如:对房价的预测、判断信用评价、电影票房预估等。

基本形式

给定由d个属性描述的示例X=(x1;x2;…;xd),其中xi是X在第i个属性上的取值,线性模型想要通过一个属性的线性组合来得到一个预测的函数,即:
f(x)=w1x1+w2x2+…+wdxd+b
一般用向量的形式可以写成:
f(x)=wTX+b
其中w=(w1;w2;…;wd),,当w和b学得之后,模型就得以确定。

线性回归目的

在这里插入图片描述
线性回归的目的就是求解出合适的θ,在一元的情况下拟合出一条直线(多元情况下是平面或者曲面),可以近似的代表各个数据样本的标签值。所以最好的直线要距离各个样本点都很接近
在这里插入图片描述
那么应该如何求得这条直线呢?

模型计算

为了计算出这条直线,我们引入损失函数的概念。损失函数表示的是预测值与实际值之间的不一致程度。表达式如下:
在这里插入图片描述
还有另一种表达式:
在这里插入图片描述
其中hθ(x(i))代表每个样本通过我们模型的预测值,y(i)代表每个样本标签的真实值,m为样本个数。
我们要做的就是找到一组值,将其带入损失函数后使得该损失函数的值最小。

梯度下降法求最优解

梯度下降方法就是沿着梯度下降的方向通过迭代逐步求取一个函数的最小值
通常情况下,数据不可能完全符合我们的要求,所以很难用矩阵去求解,所以机器学习就应该用学习的方法,因此我们采用梯度下降,不断迭代,沿着梯度下降的方向来移动,求出极小值。梯度下降法包括批量梯度下降法和随机梯度下降法(SGD)以及二者的结合mini批量下降法(通常与SGD认为是同一种,常用于深度学习中)。
图示如下:
在这里插入图片描述
在这里插入图片描述

代码演示–波士顿房价预估(python)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston

# 加载波士顿数据集
boston = load_boston()

# 将数据转为pandas,方便处理
boston_pd = pd.DataFrame(boston.data, columns=boston.feature_names)
boston_pd['price'] = boston.target
print(boston_pd)

# 绘制各属性与房屋价格的散点图,分析数据相关性
for i in range(0, 9):
    X = boston_pd.iloc[:, i:i+1]
    y = boston_pd['price']
    plt.subplot(3, 3, i+1)
    plt.scatter(X, y)
    plt.xlabel(u'{}'.format(boston.feature_names[i]))
    plt.ylabel(u'price')
    plt.title(u'{} for price'.format(boston.feature_names[i]))
    plt.show()

# 简单线性回归数据集划分
X = np.array(boston_pd.iloc[:, 5:6])
y = np.array(boston_pd['price'])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

# 多元线性回归数据集划分
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.25)

# 模型训练
lr = LinearRegression()
lr.fit(X_train, y_train)
print("权重:", lr.coef_)
print("截距:", lr.intercept_)
print(
    "拟合函数:",
    'y={}x1+{}x2+{}x3+{}x4+{}'.format(lr.coef_[0], lr.coef_[1], lr.coef_[2],
                                      lr.coef_[3], lr.intercept_))

# 预测
price_predict = lr.predict(X_test)

# 模型评估
plt.figure(figsize=(10, 6))
t = np.arange(len(X_test))
plt.plot(t, y_test, 'r', linewidth=2, label='y_test')
plt.plot(t, price_predict, 'g', linewidth=2, label='price_predict')
plt.legend()
plt.xlabel('test data')
plt.ylabel('price')
plt.show()
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值