python数据分析多元 线性回归

简介: python数据分析多元 线性回归

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

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:
                continue
                
            eles=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.shape
    
    theta=np.zeros((n,1))
    
    count=0
    converged=False
    error=np.inf
    errors=[J(theta,X,Y),]
    
    thetas={}
    for i in range(n):
        thetas[i]=[theta[i,0],]
    
    while count<=maxloop:
        if(converged):
            break
        
        count=count+1
        
        for j in range(n):
            deriv=np.dot(X[:,j].T,(h(theta,X)-Y)).sum()/m
            thetas[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=True
    return 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)/std
        else:
            X[:,j]=0
    return 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 mtick

fittingFig=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 inline

errorsFig=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](https://download.csdn.net/download/weixin_44498127/85285750
).

目录
相关文章
|
11天前
|
数据挖掘 PyTorch TensorFlow
|
12天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
34 5
|
2天前
|
机器学习/深度学习 数据挖掘 大数据
大数据时代的“淘金术”:Python数据分析+深度学习框架实战指南
在大数据时代,数据被视为新财富源泉,而从海量信息中提取价值成为企业竞争的核心。本文通过对比方式探讨如何运用Python数据分析与深度学习框架实现这一目标。Python凭借其强大的数据处理能力及丰富库支持,已成为数据科学家首选工具;而TensorFlow和PyTorch等深度学习框架则为复杂模型构建提供强有力的技术支撑。通过融合Python数据分析与深度学习技术,我们能在各领域中发掘数据的无限潜力。无论是商业分析还是医疗健康,掌握这些技能都将为企业和社会带来巨大价值。
21 6
|
1天前
|
数据可视化 数据挖掘 Python
惊呆了!Python数据分析师如何用Matplotlib、Seaborn秒变数据可视化大师?
在数据驱动时代,分析师们像侦探一样在数字海洋中寻找线索,揭示隐藏的故事。数据可视化则是他们的“魔法棒”,将复杂数据转化为直观图形。本文将带你探索Python数据分析师如何利用Matplotlib与Seaborn这两大神器,成为数据可视化大师。Matplotlib提供基础绘图功能,而Seaborn在此基础上增强了统计图表的绘制能力,两者结合使数据呈现更高效、美观。无论是折线图还是箱形图,这两个库都能助你一臂之力。
12 4
|
1天前
|
数据可视化 数据挖掘 Python
告别枯燥数字,拥抱视觉盛宴!Python 数据分析中的数据可视化艺术,你 get 了吗?
在数据驱动时代,数据分析至关重要,但单纯依赖数据表格难以揭示其背后的洞见。这时,数据可视化便彰显出其重要性,尤其借助 Python 的强大工具如 Matplotlib、Seaborn 和 Plotly 等,可将数据转化为直观的图形。Matplotlib 提供高度定制的图表,Seaborn 则简化了图表美化过程。通过折线图、散点图、箱线图、小提琴图及热力图等多种图表形式,我们可以更深入地理解数据分布与关系,有效传达信息并支持决策制定。数据可视化不仅是一门技术,更是讲述数据故事的艺术。
14 3
|
8天前
|
算法 Python
揭秘!Python数据魔术师如何玩转线性回归,让你的预测精准到不可思议
【9月更文挑战第13天】在数据科学领域,线性回归以其优雅而强大的特性,将复杂的数据关系转化为精准的预测模型。本文将揭秘Python数据魔术师如何利用这一统计方法,实现令人惊叹的预测精度。线性回归假设自变量与因变量间存在线性关系,通过拟合直线或超平面进行预测。Python的scikit-learn库提供了简便的LinearRegression类,使模型构建、训练和预测变得简单直接。
23 5
|
9天前
|
数据采集 传感器 数据可视化
利用Python进行数据分析与可视化
【9月更文挑战第11天】在数字化时代,数据已成为企业决策和科学研究的关键。本文将引导读者了解如何使用Python这一强大的工具进行数据分析和可视化,帮助初学者理解数据处理的流程,并掌握基本的可视化技术。通过实际案例,我们将展示如何从原始数据中提取信息,进行清洗、处理,最终以图形方式展现结果,使复杂的数据变得直观易懂。
|
10天前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
28 5
|
10天前
|
机器学习/深度学习 数据挖掘 TensorFlow
🔍揭秘Python数据分析奥秘,TensorFlow助力解锁数据背后的亿万商机
【9月更文挑战第11天】在信息爆炸的时代,数据如沉睡的宝藏,等待发掘。Python以简洁的语法和丰富的库生态成为数据分析的首选,而TensorFlow则为深度学习赋能,助你洞察数据核心,解锁商机。通过Pandas库,我们可以轻松处理结构化数据,进行统计分析和可视化;TensorFlow则能构建复杂的神经网络模型,捕捉非线性关系,提升预测准确性。两者的结合,让你在商业竞争中脱颖而出,把握市场脉搏,释放数据的无限价值。以下是使用Pandas进行简单数据分析的示例:
25 5
|
9天前
|
机器学习/深度学习 数据可视化 数据挖掘
深入浅出:使用Python进行数据分析的入门指南
【9月更文挑战第11天】本文旨在为初学者提供一条清晰的道路,通过Python探索数据科学的奇妙世界。我们将从基础语法讲起,逐步深入到数据处理、可视化以及机器学习等高级话题。文章不仅分享理论知识,还将通过实际代码示例,展示如何应用这些知识解决实际问题。无论你是编程新手,还是希望扩展技能的数据分析师,这篇文章都将是你宝贵的资源。