问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习-线性回归算法(附示例代码)

创作时间:
作者:
@小白创作中心

机器学习-线性回归算法(附示例代码)

引用
CSDN
1.
https://blog.csdn.net/qq_55882840/article/details/143883656

线性回归是机器学习中一种重要的预测模型,广泛应用于各种场景,如预测机票价格、股票市场走势等。本文将详细介绍线性回归算法的基本原理,并通过电影票房预测的例子,展示如何使用Python实现线性回归模型。

1.1 线性回归

回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。回归属于监督学习方法。

回归分析的方法有很多种,按照变量的个数,可以分为一元回归分析和多元回归分析;按照自变量和因变量之间的关系,可以分为线性回归分析和非线性回归分析。在机器学习中,回归分析经常作为一种预测模型,例如,预测分析出行日期与机票价格之间的关系,股票市场价格等。

1.1.1 一元线性回归

利用回归分析来确定多个变量的依赖关系的方程称为回归方程。如果回归方程所呈现的图形为一条直线,则称为线性回归方程。

线性回归(Linear Regression)算法的核心是线性回归方程,通过在输入数据和输出数据之间建立一种直线的相关关系,完成预测的任务。即将输入数据乘以一些常量,经过基本处理就可以得到输出数据。线性回归方程的参数可以有一个或多个,经常用于实际的预测问题,例如,预测机票价格、股票市场走势预测等,是一个广受关注的算法。

由于能够用一条直线描述数据之间的关系,因此对于新出现的数据,将输人数据乘以些常量,经过基本处理可以得到输出数据。

假设输入的数据X=(x_1,…,x_n) ,线性回归的最简单模型是输⼊变量的线性组合:

其中X表示输入数据,W是模型的参数。如果X只有一个数值,则线性回归为y=WX+b称为一元线性回归。如果X为一组数据x=(x_1,…,x_n),则为多元线性回归。

一元线性回归方程比较容易求解,多元线性回归模型的求解比较复杂。经常使用最小二乘算法逼近从而进行拟合。除了最小二乘法,也可以使用其他的数学方法进行拟合。

*最小二乘法:是一种数学优化方法,也称最小平方法。它通过最小化误差的平方和寻找最佳结果。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

【例】一元线性回归预测电影的票房收入。

说明:光明电影公司投资拍摄了五部电影,并且整理了各部影片的投资金额(百万元)和票房收入(百万元)。电影的投入和票房收入的数据见下面表格8.1。接下来要拍一部投资2千万的电影,使用一元线性回归预测新电影的票房收入。

步骤一:使用数据绘制图,发现数据分布规律

import numpy as np
import matplotlib.pyplot as plt

X = np.array([[6],[9],[12],[14],[16]])
y = np.array([[9],[12],[29],[35],[59]])
plt.figure()
plt.xlabel('cost')
plt.ylabel('income')
plt.title('cost and income of film')
plt.axis([0, 25,0, 60])
plt.plot(X, y, '.')
plt.show()  

步骤二:线性回归预测电影票房收入。

预测某部电影的票房收入,可以使用SKlearn的linear_model模块,其中的LinearRegression函数能实现线性回归。

格式:

class sklearn.linear_model.LinearRegression(fit_intercept = True,normalize = False,copy_X = True,n_jobs = None )  

主要参数: normalize :布尔值,可选,默认为False。如果为True,则回归向量X将在回归之前进行归一化处理。

属性: coef_ :线性回归问题的估计系数。 intercept_:回归方程的截距。

from sklearn import linear_model
import matplotlib.pyplot as plt

def drawplt():
    plt.figure()
    plt.title('Cost and Income Of a Film')
    plt.xlabel('Cost(Million Yuan)')
    plt.ylabel('Income(Million Yuan)')
    plt.axis([0, 25, 0, 60])
    plt.grid(True)

X = [[6], [9], [12], [14], [16]]
y = [[9], [12], [29], [35], [59]]

model = linear_model.LinearRegression()
model.fit(X, y)

a = model.predict([[20]])
w=model.coef_
b=model.intercept_

print("投资2千万的电影预计票房收入为:{:.2f}百万元".format(model.predict([[20]]) [0][0]))
print("回归模型的系数是:",w)
print("回归模型的截距是:",b)  

print("最佳拟合线: y = ",int(b),"+", int(w),"× x" )

drawplt()
plt.plot(X, y, 'k.')
plt.plot([0,25],[b,25*w+b])
plt.show()  

1.1.2 多元线性回归预测电影票房

光明电影公司在运行过程发现,电影票房除了拍摄投资之外,还不广告推广的费用相关。于是在上面的数据基础上,又搜集到了每部电影的广告费用,整理成下面的表格。使用多元回归算法,预测投资1千万、广告推广费用3百万的电影的票房收入。

代码:

import numpy as np
from sklearn import datasets,linear_model

x = np.array([[6,1,9],[9,3,12],[12,2,29],
              [14,3,35],[16,4,59]])

X = x[:,:-1]
Y = x[:,-1]

print('X:',X)
print('Y:',Y)

# 训练数据
regr = linear_model.LinearRegression()
regr.fit(X,Y)

print('系数(w1,w2)为:',regr.coef_)
print('截距(b)为:',regr.intercept_)

# 预测
y_predict = regr.predict(np.array([[10,3]]))
print('投资1千万,推广3百万的电影票房预测为:',y_predict,'百万')  

运行结果:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号