《机器学习》一元、多元线性回归的实现 No.4

一、一元线性回归实现

先直接看完整代码:

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

date = pd.read_csv('data.csv') #导入数据

plt.scatter(date['广告投入'],date['销售额'])  # 用散点图展示数据
plt.show()

corr = date.corr()   # 计算相关系数,判断数据和结果直接是否存在因果关系

lr = LinearRegression()   # 建立训练模型,全部使用默认参数
x = date[['广告投入']]  # 训练集
y = date[['销售额']]  # 标签项

lr.fit(x,y)  # 训练数据集

result = lr.predict(x)  # 对训练集进行测试
score = lr.score(x,y)   # 得到测试结果的评分,即正确率

a = round(lr.intercept_[0],2)  # 打印截距,四舍五入保留2为小数,intercept为ndarry(1,)的一维数组,只有一个元素
b = round(lr.coef_[0][0],2)  # 打印斜率,四舍五入保留两位小数,因为coef为ndarry(1,1)的二维数组类型,形状为一行一列

print("线性回归模型为:y = {}x + {}".format(b,a))

predict = lr.predict([[40],[45],[50]])  # 输入数据,进行预测
print(predict)

其运行结果为:

date.csv文件内容为:

二、 线性回归模型类分析

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

1**、参**数

  • fit_intercept 是否有截距,默认为True。如果为False则直线过原点
  • normalize 是否将数据归一化 ,默认为False。如果为True,则在拟合之前将输入数据进行标准化,即将样本的每个特征减去其均值并除以其标准差 ,以确保每个特征具有零均值和单位方差
  • **copy_X:**是否复制X,默认为True。如果为False,则直接对原数据进行覆盖,及经过中心化、标准化后,是否把新数据覆盖到原数据上
  • **n_jobs:**计算式设置的任务个数,如果选择-1则代表使用所有的CPU,这一参数的对于目标个数>1且足够大规模的问题有加速作用

2、返回值Attributes

调试模式下:

coef_ : 对于线性回归问题计算得到的feature(特征)的系数 ,如果输入的是多目标问题,则返回一个二维数组 ,如果是单目标问题,返回一维数组,即如果对于一元线性回归y = β0 + β1x + ε ,这里的corf_ 就**返回β1的值,**如果是多元的,则返回多个β的值,二维数组类型返回

intercept_ : 代表线性回归模型的截距,即当所有特征的取值都为0时,模型预测的输出值。对于多维特征的线性回归模型,intercept_ 是一个标量。y = β0 + β1x + ε 中β0 的值

3、方法

**fit(x,y) :**对训练集x和y进行训练

**predict(x):**使用训练得到的估计器对输入为x的集合进行预测,得到预测值

**score(x,y):**预测效果评分

4、相关系数

又叫皮尔逊相关系数,指的是特征变量(自变量)与因变量之间的线性关系强度的度量。具体来说,相关系数衡量的是自变量与因变量之间的线性相关程度,即自变量的变化对因变量的影响程度。一般用r表示,计算方式如下所示:

Cov(X,Y) 表示X与Y的协方差Var[X] 为X的方差,Var[Y] 为Y的方差

| r | >= 0.8时,表示高度相关,即存在高度因果关系

0.5<= | r | < 0.8 时,表示中度相关

0.3<= | r | < 0.5 时,表示低度相关

| r | < 0.3 时,表示不相关

此时可以通过调试模式 看到上述代码中corr 所计算的相关系数

5、拟合优度:

其计算公式为:

SSR :回归平方和, SST:离差平方和

1、反应回归直线的拟合程度

2、取值范围为[0,1]

3、R方越接近1,说明拟合效果越好,越接近0,说明拟合效果越越差

4、R方的平方根是相关系数

三、多元线性回归实现

1、有下列一份文件 "多元线性回归.csv"

2、调整R方

在上述一元线性回归模型中,使用R方来判断数据与模型的拟合程度,那么在多元的线性回归中,就不能使用R方来判断了,需要使用调整R方来判断,

R方的公式为:

调整R方公式为:

n代表样本数据的观测数量,p代表模型中自变量的数量。

3、假设检验

步骤:

假设事件H0是真的,然后判别小概率事件是否发生,如果发生,就拒绝H0事件,接受H1事件,如果没有发生,就接收H0事件,即小概率事件不发生是极大概率事件,所以上述 假设合理,但是如果小概率事件发生了,此时拒绝了H0就相当于拒绝了真实情况,那么就犯了第一类错误,即拒真,拒真概率就是我们定的α,即显著性水平,一般为0.05,

第一类错误:P(拒绝H0|H0真) = α

第二类错误:P(接受H0|H0假) = β

1)F检验(线性关系检验)

检验自变量x与因变量y之间的线性关系是否显著,或者说,他们之间能否用一个线性模型来表示。(对整个方程显著性的检验)

2)T检验(回归系数检验)

通过对回归系数β与0的检验,看其是否有显著性差异,来判断回归系数是否显著。(检验系数是否显著)

4、数据标准化

1)0~1标准化

将原始数据自变量的每一个值减去最小值再除以最大值减最小值

2)z标准化

将原始数据自变量的每一个数值减去自变量平均值再除以标准差

5、实现代码

python 复制代码
import pandas as pd
from sklearn.linear_model import LinearRegression

data = pd.read_csv("多元线性回归.csv",encoding='gbk',engine='python')  # 导入数据,编码方式为gbk模式,engine表示用Python去读取信息

corr = data[["体重",'年龄','血压收缩']].corr()  # 计算相关系数

lr = LinearRegression()  # 建立模型
x = data[["体重",'年龄']]  # 设置训练集
y = data[['血压收缩']]   # 设置标签

lr.fit(x,y)  # 训练数据

score = lr.score(x,y)  # 查看评分,正确率,计算方法叫 调整R方

predict_1 = lr.predict([[40,60]])  # 输入数据进行测试
predict_2 = lr.predict([[50,80],[90,50]])

a = lr.coef_  # 表示出B的值
b = lr.intercept_  # 表示截距的值
print("线性回归模型为:y = {:.2f}x1 + {:.2f}x2 + {:.2f}".format(a[0][0],a[0][1],b[0]))

其运行结果为:

其对应的截距和斜率的值为:

四、案例

有下列代码数据,存放在文件 案例.csv 中

对其进行训练,得到本年固定资产投资额

python 复制代码
import pandas as pd
from sklearn.linear_model import LinearRegression

data = pd.read_excel("案例.xlsx")
# 计算相关系数
corr = data[["分行编号",'不良贷款','各项贷款余额','本年累计应收贷款','贷款项目个数','本年固定资产投资额']].corr()
# 建立模型
lr = LinearRegression()
x = data[['不良贷款','各项贷款余额','本年累计应收贷款','贷款项目个数']]
y = data[['本年固定资产投资额']]
# 训练数据
lr.fit(x,y)

score = lr.score(x,y)  # 查看评分,正确率,计算方法叫 调整R方
predict_1 = lr.predict([[1.5,52,12,15]])  # 输入数据进行测试
predict_2 = lr.predict([[10,80,8,9],[15,90,50,11]])

a = lr.coef_  # 表示出B的值
b = lr.intercept_  # 表示截距的值
print("线性回归模型为:y = {:.2f}x1 + {:.2f}x2 + {:.2f}x3+ {:.2f}x4 + {:.2f}".format(a[0][0],a[0][1],a[0][2],a[0][3],b[0]))

其打印结果为:

相关推荐
叫我:松哥2 小时前
基于机器学习的癌症数据分析与预测系统实现,有三种算法,bootstrap前端+flask
前端·python·随机森林·机器学习·数据分析·flask·bootstrap
B站计算机毕业设计超人3 小时前
计算机毕业设计hadoop+spark知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习
大数据·hadoop·爬虫·机器学习·spark·知识图谱·推荐算法
智能汽车人3 小时前
行业分析---自动驾驶行业的发展
人工智能·机器学习·自动驾驶
##晴天小猪3 小时前
ByteTrack多目标跟踪流程图
人工智能·算法·目标检测·机器学习·目标跟踪
RaidenQ3 小时前
2024.9.20 Python模式识别新国大EE5907,PCA主成分分析,LDA线性判别分析,GMM聚类分类,SVM支持向量机
python·算法·机器学习·支持向量机·分类·聚类
Kenneth風车3 小时前
【机器学习(九)】分类和回归任务-多层感知机 (MLP) -Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·分类·数据分析·回归
NiNg_1_2344 小时前
机器学习之Python中Scikit-Learn(sklearn)入门
python·机器学习·scikit-learn
小羊在奋斗5 小时前
【C++】探秘二叉搜索树
c++·人工智能·神经网络·机器学习
鸽芷咕6 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘tensorflow‘
python·机器学习·tensorflow·bug·neo4j
HyperAI超神经6 小时前
在线教程丨1 步生成 SOTA 级别图像,Hyper-SD 一键启动教程上线!
人工智能·机器学习·stable diffusion