本节是python实现多元回归的代码部分,理论参考链接: link.
代码下载地址link.
代码可直接赋值运行,如有问题请留言
本节使用的数据是收入与年龄,性别关系的多元线性回归

python数据分析多元 线性回归

  • 1 基本环境设置
  • 2 读取数据加载
  • 3 y预估方法与误差方法设计
  • 4 梯度下降设计
  • 5 数据处理
  • 6 模型运行
  • 7 模型可视化
  • 8 误差绘图

1 基本环境设置

import numpy as np
import matplotlib.pyplot as pl
import matplotlib
matplotlib.rcParams['font.sans-serif']='SimHei' #画图正常显示中文
matplotlib.rcParams['font.family']='sans-serif'
matplotlib.rcParams['axes.unicode_minus']=False

2 读取数据加载


def loadDataset(filename):X=[]Y=[]with open(filename,'rb') as f:for idx,line in enumerate(f):line=line.decode('utf-8').strip()if not line:continueeles=line.split(',')if idx==0:numFea=len(eles)eles=list(map(float,eles))#map返回一个迭代对象X.append(eles[:-1])Y.append([eles[-1]])return np.array(X),np.array(Y)

预览下数据,数据是如下图所示

第一列性别,第二列年龄,第三列收入

3 y预估方法与误差方法设计

y 估计方法
def h(theta,X):
return np.dot(X,theta)
误差和估计
def J(theta,X,Y):
return np.sum(np.dot((h(theta,X)-Y).T,(h(theta,X)-Y))/(2*m))

4 梯度下降设计

def bgd(alpha,maxloop,epsilon,X,Y):m,n=X.shapetheta=np.zeros((n,1))count=0converged=Falseerror=np.inferrors=[J(theta,X,Y),]thetas={}for i in range(n):thetas[i]=[theta[i,0],]while count<=maxloop:if(converged):breakcount=count+1for j in range(n):deriv=np.dot(X[:,j].T,(h(theta,X)-Y)).sum()/mthetas[j].append(theta[j,0]-alpha*deriv)for j in range(n):theta[j,0]=thetas[j][-1]error=J(theta,X,Y)errors.append(error)if(abs(errors[-1]-errors[-2])<epsilon):converged=Truereturn theta,errors,thetas

5 数据处理

这里的数据没有异常值,缺失值。在R部分也讲过缺失值核异常值的处理,盖帽法填补,删除,或spss回归,knn填补

def standarize(X):"""特征标准化处理Args:X 样本集Returns:标准化后的样本集"""m,n=X.shape#归一化每一个特征for j in range(n):features=X[:,j]meanVal=features.mean(axis=0)std=features.std(axis=0)if std!=0:X[:,j]=(features-meanVal)/stdelse:X[:,j]=0return X

读取属于与预览维度

ori_X,Y=loadDataset(‘./data/income.csv’)
print(ori_X.shape)
print(Y.shape)

结果如下:

(100, 2)
(100, 1)

6 模型运行

m,n=ori_X.shape
X=standarize(ori_X.copy())
X=np.concatenate((np.ones((m,1)),X),axis=1)alpha=0.3
maxloop=5000
epsilon=0.0000000000000001
result=bgd(alpha,maxloop,epsilon,X,Y)
theta,errors,thetas=result
print(errors)
print(theta)

结果如下:
[24.33730066195, 13.505993103864864, 8.227069671967811, 5.646107653055884, 4.380348621596483, 3.7577018007906924, 3.450468610785003, 3.2983894621721754, 3.2228610964245137, 3.1852188396658816, 3.166387845485983, 3.1569292252947605, 3.152157461763612, 3.149738790112871, 3.1485065999017103, 3.1478754430280538, 3.1475502771380808, 3.147381731762091, 3.147293811506613, 3.1472476466986463, 3.14722324380204, 3.1472102569749523, 3.147203299011644, 3.1471995464497224, 3.1471975096191853, 3.1471963972545858, 3.1471957862237945, 3.147195448748745, 3.1471952614181884, 3.147195156950363, 3.147195098447062, 3.147195065560232, 3.1471950470106522, 3.1471950365163703, 3.1471950305635144, 3.147195027178879, 3.1471950252505327, 3.1471950241499296, 3.147195023520792, 3.147195023160675, 3.1471950229543095, 3.147195022835933, 3.147195022767972, 3.1471950227289267, 3.147195022706478, 3.1471950226935674, 3.1471950226861374, 3.147195022681859, 3.1471950226793957, 3.1471950226779772, 3.1471950226771592, 3.147195022676689, 3.147195022676417, 3.14719502267626, 3.1471950226761694, 3.1471950226761174, 3.147195022676087, 3.1471950226760703, 3.147195022676061, 3.1471950226760543, 3.147195022676051, 3.1471950226760494, 3.147195022676048, 3.147195022676048]
[[ 6.142094 ]
[ 2.16407412]
[-0.03431546]]

7 模型可视化

使用的是三维绘图

%matplotlib
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm
import matplotlib.ticker as mtickfittingFig=pl.figure(figsize=(16,12))
title='bgd:rate=%.3f,maxloop=%d,epsilon=%.3f \n'%(alpha,maxloop,epsilon)
ax=fittingFig.gca(projection='3d')xx=np.linspace(0,1,100)
yy=np.linspace(0,100,100)
zz=np.zeros((100,100))
for i in range(100):for j in range(100):normalizegender=(xx[i]-ori_X[:,0].mean(0))/ori_X[:,0].std(0)normalizeAge=(yy[j]-ori_X[:,1].mean(0))/ori_X[:,1].std(0)x=np.matrix([[1,normalizegender,normalizeAge]])zz[i,j]=h(theta,x)xx,yy=np.meshgrid(xx,yy)
ax.zaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
ax.plot_surface(xx,yy,zz,rstride=1,cstride=1,cmap=cm.rainbow,alpha=0.1,antialiased=True)xs=ori_X[:,0].flatten()
ys=ori_X[:,1].flatten()
zs=Y[:,0].flatten()ax.scatter(xs,ys,zs,c='b',marker='o')ax.set_xlabel(u'性别')
ax.set_ylabel(u'年龄')
ax.set_zlabel(u'收入')

可以发现模型的平面将数据按照维度较好拟合

8 误差绘图

%matplotlib inlineerrorsFig=pl.figure()
ax=errorsFig.add_subplot(111)
ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))pl.plot(range(len(errors)),errors)
pl.xlabel(u'迭代次数')
pl.ylabel(u'代价函数')
pl.show()


链接: link.

python数据分析多元 线性回归相关推荐

  1. Python实现多元线性回归

    Python实现多元线性回归 线性回归介绍 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛.其表达形式为y = w'x+e,e为误差服从 ...

  2. 原理 + 代码 | Python 实现多元线性回归模型 (建模 + 优化,附源数据)

    前言 多元线性回归模型非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多元共线性这个问题将贯穿所有的机器学习模型,所以本文会将原理知识穿插于代码段中,争 ...

  3. Python 实战多元线性回归模型,附带原理+代码

    作者 | 萝卜 来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多 ...

  4. 【项目实战】Python实现多元线性回归模型(statsmodels OLS算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 回归问题是一类预测连续值的问题,而能满足这样要求的数学模型称作回 ...

  5. Python预测——多元线性回归

    答辩结束了,把论文里有用的东西摘出来. 多元线性回归 多元线性回归模型: 其中 y 为要预测的变量,x 为影响 y 值的变量,b 为回归系数,计算方式为: 计算结果为一个矩阵,分别对应b0,b1,b2 ...

  6. 利用python实现多元线性回归

    前言 本文介绍了如何用python进行回归分析 一.简单线性回归 直线回归分析是研究两变量(自变量和因变量)之间的依存关系及其关系的具体方程的形式.分析中所形成的这种关系式称为回归模型,其中以一条直线 ...

  7. python实现多元线性回归,以2022数模国赛为例(实战必看,附源代码)

    回归分析是确定变量间依赖关系的一种统计分析方法,属于监督学习方法.由变量的不同可以分为一元线性回归和多元线性回归 接下来以多元线性回归为例介绍 当待确定的变量超过一个时,就需要使用多元线性回归算法,下 ...

  8. 利用python实现多元线性回归确定喷墨大师的命中方向

    喷墨大师是玩吧app的一款小游戏,两只章鱼相互用墨汁进行投射对战,利用风力.角度.力度.距离四个因素向敌方进行投射,命中后会对敌方造成一定的血量损失,直到地方血量为0即可获得胜利 一.游戏介绍,变量设 ...

  9. Python机器学习——多元线性回归案例(二)

    引入披萨问题 回顾一下自己的生活经验,匹萨的价格其实还会受到其他因素的影响. 比如,匹萨的价格还与辅料有关.让我们再为模型增加一个解释变量.用一 元线性回归己经无法解决了,我们可以用更具一般性的模型来 ...

  10. python多元线性回归模型案例_Python 实战多元线性回归模型,附带原理+代码

    原标题:Python 实战多元线性回归模型,附带原理+代码 作者 | 萝卜 来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一 ...

最新文章

  1. opencv 二值化 python_Python OpenCV 图像二值化-阈值分割
  2. python-基础day10
  3. SAP成都研究院小伙伴们开发的一个SAP C4C POC - 通过名片扫描的方式录入联系人数据到系统
  4. Commit request failed Commit failed. Ref must be HEAD and is HEAD
  5. SharePoint 2010 master page 控件介绍(5):其他
  6. Docker,一个傲娇的男人
  7. Qt文档阅读笔记-C++与QML混合编程(QML画饼状图)【通过信号与槽交互】
  8. 【C++、Matlab】VS2013 C++读写.mat文件
  9. MySQL中表连接方式
  10. java面试 设计模式_Java面试中常问到的设计模式
  11. Windows Dos命令下查看端口号,杀死端口
  12. 30秒Python轻松入门-目录
  13. 确立Sprint 目标 (Sprint Goal) 的8个理由
  14. 小刘的自学安卓开发第一天
  15. CSS第五天总结——PS切图、CSS属性书写顺序
  16. 重磅!全球前2%顶尖科学家榜单发布!
  17. Win7与VirtualBox ubuntu共享文件夹
  18. Unbox failed! RequestError: Error: connect ETIMEDOUT 151.101.76.133:443
  19. iOS开发-将UIView置于最上层
  20. 香港开户炒股非常简单 体验香港开户流程

热门文章

  1. python正态分布函数_使用Python实现正态分布、正态分布采样
  2. 9.1 交易数据的存储
  3. 2021-2027中国家具拉手市场现状及未来发展趋势
  4. Excel 实现 平均数±标准差
  5. vue 版的老虎机抽奖活动效果折腾小记
  6. 小米手机打开报告mimu查看程序调试错误locat
  7. 转行学IT,能找到好工作吗?
  8. pdman 创建表同步数据库_PDMan-2.0 正式发布:用心开源,免费的国产数据库建模工具PowerDesigner...
  9. lte基站信号测试软件,LTE基站的RF一致性测试
  10. 智能家居linux 源码,搭建开源智能家居系统Domoticz