⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计10207字,阅读大概需要20分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
⏰个人网站:https://jerry-jy.co/❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我
人工智能数学与代码实现--回归分析
人工智能数学与代码实现–回归分析
实验背景
回归分析是一种多元统计分析上统计分析数据的方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来预测研究者感兴趣的变量。在实际问题中,一个变量往往受到多个变量的影响,此时需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,当多个变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归。逻辑回归的模型,本质上是一个线性回归模型。逻辑回归实质是将数据拟合到一个Logistic函数中,从而预测时间发生的可能性。在实际应用中,最为常用的就是二分类的逻辑回归。本实验主要运用一元线性回归、多元线性回归和Logistic回归的理论对一些实例的应用。
实验描述
本次实验有三个数据:
fire.csv
包含两列数据,第一列为住户距消防站的距离,第二列为火灾损失
数据路径为:/root/experiment/data/fire.csv
对该数据进行一元回归分析
pressure.csv
包含三列数据,第一列为体重,第二列为年龄,第三列为血压的收缩压
数据路径为:/root/experiment/data/ pressure.csv
对该数据进行多元回归分析
study.csv
包含两列数据,第一列为学生学习时间,第二列为是否通过考试
数据路径为:/root/experiment/data/ study.csv
对该数据进行Logistic回归分析
实验环境
-
Oracle Linux 7.4
-
Python 3
实验目的
-
基于Python实现一元线性回归
-
基于Python实现多元线性回归
-
基于Python实现Logistic回归
知识点
-
一元线性回归
-
多元线性回归
-
Logistic回归
实验分析
任务实施过程
一、打开Jupyter,并新建python工程
1.桌面空白处右键,点击Konsole打开一个终端
2.切换至/experiment/jupyter
目录
cd experiment/jupyter
3.启动Jupyter,root用户下运行需加–allow-root
jupyter notebook --ip=127.0.0.1 --allow-root
4.依次点击右上角的 New,Python 3新建python工程
5.点击Untitled,在弹出框中修改标题名,点击Rename确认
二、一元线性回归和显著性检验
假设某一保险公司希望确定居民住宅区火灾造成的损失数额与该住户到最近消防站的距离之间的相关关系,以便确定出保险金额。下表列出了15起火灾事故的损失及火灾发生地与最近消防站的距离。将下表中数据(不算表头)保存到fire.csv文件中。试确定一个一元线性回归模型。假如一住户到最近消防站的距离为7km,那么试预测若发生火灾,火灾损失为多少千元?
1.使用statsmodels库求解
(1)绘制这15个样本点的分布状况散点图
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
fire = np.loadtxt("/root/experiment/data/fire.csv",delimiter=',')
# 用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.title('样本点的分布状况散点图')
plt.xlabel('距消防站的距离')
plt.ylabel('火灾损失')
plt.scatter(fire[:,0], fire[:,1])
plt.show()
从上图可以看出,样本数据点大致分布在一条直线附近,这说明变量𝑥和变量𝑦之间具有明显的线性关系
(2)最小二乘法估计回归参数
statsmodels.api.OLS(endog, exog = None, missing=’ none’ , hasconst = None, **kwargs)
OLS类的常用参数说明:
-
endog:表示因变量y的数据
-
exog:表示自变量的一个阵列,包括截距项(使用statsmodels.api. add_constant函数添加)
from scipy import optimize
import statsmodels.api as sm
#方法一:可以用线性拟合的方法估计参数
x = fire[:,0]
y = fire[:,1]
def regula(p):
a,b = p
return y - a - b*x
result = optimize.least_squares(regula,[0,0])
print('回归参数的估计值为:',result.x)
# 方法二:使用OLS()
# 使用 sm.add_constant() 加入一列截距列
X = sm.add_constant(fire[:,0])
model = sm.OLS(fire[:,1], X)
# 获取拟合结果
results = model.fit()
# 调取计算出的回归系数
print('回归参数的估计值为:',results.params)
# 方法三:使用formula.ols()
df={
'x':fire[:,0],'y':fire[:,1]}
res=sm.formula.ols('y~x',data=df).