A--多元线性回归的python实现

In [1]:

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

In [2]:

#创建一个矩阵
a = np.array([[1, 2], [3, 4]])
m = np.mat(a)
m

[2]:

matrix([[1, 2],
        [3, 4]])

In [4]:

#矩阵运算回顾
# 矩阵转秩
m.T
# 矩阵乘法
m * m
a * a
# 矩阵?列式
np.linalg.det(m)
# 求逆矩阵
m.I
#转换成array
m.A
#降维成一维
m.fattlen

Out[4]:

matrix([[-2. ,  1. ],
        [ 1.5, -0.5]])

假设输入数据为DataFrame格式,最后一列为标签值,在此基础上编写线性回归自定义函数(最小二乘)

In [ ]:

#矩阵公式
w=(x.T * x).I * X.T * y 

In [53]:

#根据最小二乘法推导得 w=(x.T * x).I * X.T * y 注:如果(x.T * X)不满足可逆性,那么最小二乘无解,另不满足凸函数,也无解
#又因为特征矩阵在存在多重共线性的情况下,特征矩阵不满足可逆性,所以在做回归之前,需要消除多重共线性
def standRegres(dataSet):
    #把DataFrame转换成array 在转换成matrix,因为DateFrame每一列数据可以不一样,不能直接计算,转换成matirx同时,数据格式也会统一
    xMat = np.mat(dataSet.iloc[:, :-1].values)
    yMat = np.mat(dataSet.iloc[:, -1].values).T
    xTx = xMat.T*xMat
    if np.linalg.det(xTx) == 0:#判断xTx是否是满秩矩阵,若不满秩,则?法对其进?求逆矩阵的操作
        print("This matrix is singular, cannot do inverse")
        return
    ws = xTx.I * (xMat.T*yMat)
    return ws
#这?需要注意的是,当使?矩阵分解来求解多元线性回归时,必须添加?列全为1的列,?于表征线性?程截距b。

In [54]:

ex0 = pd.read_table(‘ex0.txt‘, header=None)
ex0.head()

Out[54]:

  0 1 2
0 1.0 0.067732 3.176513
1 1.0 0.427810 3.816464
2 1.0 0.995731 4.550095
3 1.0 0.738336 4.256571
4 1.0 0.981083 4.560815

In [55]:

ws = standRegres(ex0)
ws
#返回结果即为各列特征权重,其中数据集第?列值均为1,因此返回结果的第?个分量表示截距

Out[55]:

matrix([[3.00774324],
        [1.69532264]])

In [56]:

#可视化展示
yhat = ex0.iloc[:, :-1].values * ws
plt.plot(ex0.iloc[:, 1], ex0.iloc[:, 2], ‘o‘)
plt.plot(ex0.iloc[:, 1], yhat)

Out[56]:

[<matplotlib.lines.Line2D at 0x215fd3146a0>]

模型评价指标残差平?和SSE

In [23]:

y = ex0.iloc[:, -1].values
yhat = yhat.flatten()
rss = np.power(yhat - y, 2).sum()
rss

Out[23]:

1.3552490816814904

In [26]:

#将SSE做一个封装
def sseCal(dataSet, regres):#设置参数为 数据集 与 回归方法
    n = dataSet.shape[0]
    y = dataSet.iloc[:, -1].values
    ws = regres(dataSet)
    yhat = dataSet.iloc[:, :-1].values * ws
    yhat = yhat.reshape([n,])
    rss = np.power(yhat - y, 2).sum()
    return rss
 

In [29]:

sseCal(ex0,standRegres)

Out[29]:

1.3552490816814904

模型评价指标 决定系数R_square,决定系数分布在[0, 1]区间内,且越趋近于1,表明拟合程度越好。

In [21]:

sse = sseCal(ex0, standRegres)
y = ex0.iloc[:, -1].values
sst = np.power(y - y.mean(), 2).sum()
1 - sse / sst

Out[21]:

0.9731300889856916

In [31]:

#封装R**2
2
def rSquare(dataSet, regres):#设置参数为 数据集 与 回归方法
    sse = sseCal(dataSet, regres)
    y = dataSet.iloc[:, -1].values
    sst = np.power(y - y.mean(), 2).sum()
    return 1 - sse / sst

In [32]:

rSquare(ex0, standRegres)

Out[32]:

0.9731300889856916

线性回归的Scikit-Learn实现

In [60]:

from sklearn import linear_model
reg = linear_model.LinearRegression(fit_intercept=True)
reg.fit(ex0.iloc[:, :-1].values, ex0.iloc[:,-1].values)

Out[60]:

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

In [61]:

reg.coef_#返回系数
Out[61]:
array([0.        , 1.69532264])
In [62]:
reg.intercept_#返回截距
Out[62]:
3.0077432426975905

然后计算模型MSE和决定系数

In [63]:

from sklearn.metrics import mean_squared_error, r2_score
yhat = reg.predict(ex0.iloc[:, :-1])
mean_squared_error(y, yhat)

Out[63]:

0.006776245408407454

In [64]:

mean_squared_error(y, yhat)*ex0.shape[0]

Out[64]:

1.3552490816814908

In [65]:

r2_score(y, yhat)

Out[65]:

0.9731300889856916

原文地址:https://www.cnblogs.com/Koi504330/p/11909381.html

时间: 2024-09-29 07:50:24

A--多元线性回归的python实现的相关文章

机器学习 —— 多元线性回归

什么是多元线性回归? 在线性回归分析中,如果有两个或两个以上的自变量,就称为多元线性回归(multivariable linear regression).如果我们要预测一套房子的价格,影响房子价格的因素可能包括:面积.卧室数量.层数以及房龄,我们用x1.x2.x3.x4来代表这4个特征(features).在这里,我们假设房子的价格和这4个特征值都是线性相关的,并且用hθ来表示预测房子的价格,那么有: \[{h_\theta }(x) = {\theta _0} + {\theta _1}{x

02-07 多元线性回归(波士顿房价预测)

目录 多元线性回归(波士顿房价预测) 一.导入模块 二.获取数据 三.训练模型 四.可视化 五.均方误差测试 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ 多元线性回归(波士顿房价预测) 一.导入模块 import pandas as pd import matplotlib.pyplot as plt from matplotlib.font_manager im

多元线性回归和多项式回归

多项式回归也称多元非线性回归,是指包含两个以上变量的非线性回归模型.对于多元非线性回归模型求解的传统解决方案,仍然是想办法把它转化成标准的线性形式的多元回归模型来处理. 多元非线性回归分析方程 如果自变数与依变数Y皆具非线性关系,或者有的为非线性有的为线性,则选用多元非线性回归方程是恰当的.例如,二元二次多项式回归方程为: 令,及于是上式化为五元一次线性回归方程: 这样以来,便可按多元线性回归分析的方法,计算各偏回归系数,建立二元二次多项式回归方程. -参考文献:智库百科,点击打开 多元二项式回

简单多元线性回归(梯度下降算法与矩阵法)

多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测. 对应的模型如下: n: 特征数量. 一般选取残差平方和最小化作为损失函数,对应为: M:训练样本数量. 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法(Gradient Descent),第二种是矩阵法(The normal equations). 梯度下降算法

多元线性回归

之前我们涉及过线性回归,不过那个是单元的(一个未知数X),这回我们来学习一下多元线性回归(多个X). 首先我们给一组房子数据: 我们给出几个关于多元线性回归的概念(我们把价格设为y,其他设为x): n : 特征数量(这里就是4) :第i组特征里的第j个特征 :第i组特征 可以用向量的方式表示.比如x(2) =  多元线性回归方程就为: 还可以写成: hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+?+θnxn (x0 = 1) 然后我们可以用矩阵来表示这个多元线性回归函数.(矩阵的知识请看我

R语言解读多元线性回归模型

转载:http://blog.fens.me/r-multi-linear-regression/ 前言 本文接上一篇R语言解读一元线性回归模型.在许多生活和工作的实际问题中,影响因变量的因素可能不止一个,比如对于知识水平越高的人,收入水平也越高,这样的一个结论.这其中可能包括了因为更好的家庭条件,所以有了更好的教育:因为在一线城市发展,所以有了更好的工作机会:所处的行业赶上了大的经济上行周期等.要想解读这些规律,是复杂的.多维度的,多元回归分析方法更适合解读生活的规律. 由于本文为非统计的专业

线性模型(1) —— 多元线性回归

提纲: 线性模型的基本形式 多元线性回归的损失函数 最小二乘法求多元线性回归的参数 最小二乘法和随机梯度下降的区别 疑问 学习和参考资料 1.线性模型的基本形式 线性模型是一种形式简单,易于建模,且可解释性很强的模型,它通过一个属性的线性组合来进行预测,其基本的形式为: 式(1) 转换成向量形式之后写成: 式(2) 为什么说其解释性很强呢,是因为模型的权值向量十分直观地表达了样本中每一个属性在预测中的重要度,打个比方,要预测今天是否会下雨,并且已经基于历史数据学习到了模型中的权重向量和截距b,则

【机器学习实战】多元线性回归模型

在许多实际问题中,影响因变量Y的自变量不止一个,通常设为p个,此时无法借助于图形的帮助来确定模型,这里则使用一种最为简单且普遍的模型--多元线性模型来进行回归计算. 1.数学模型 当影响Y值的因素不唯一时,我们可以使用多元线性回归模型: 当未知参数有两个时,我们可以画出此方程的图形表示(此时是一个平面,如图).如果未知数大于2时,则很难把此超平面给画出来. 如上图,为了求得等参数的值,我们由各个样本点(图中为红点)做一条平行于Y轴的直线,此直线交平面方程于一点,然后我们求得此线段的程度,并进行平

R语言:多元线性回归和模型检验

利用swiss数据集进行多元线性回归研究 # 先查看各变量间的散点图 pairs(swiss, panel = panel.smooth, main = "swiss data", col = 3 + (swiss$Catholic > 50)) # 利用全部变量建立多元线性回归 a=lm(Fertility ~ . , data = swiss) summary(a) ## ## Call: ## lm(formula = Fertility ~ ., data = swiss

SPSS--回归-多元线性回归模型案例解析

多元线性回归,主要是研究一个因变量与多个自变量之间的相关关系,跟一元回归原理差不多,区别在于影响因素(自变量)更多些而已,例如:一元线性回归方程 为: 毫无疑问,多元线性回归方程应该为: 上图中的 x1,  x2, xp分别代表"自变量"Xp截止,代表有P个自变量,如果有"N组样本,那么这个多元线性回归,将会组成一个矩阵,如下图所示: 那么,多元线性回归方程矩阵形式为: 其中: 代表随机误差, 其中随机误差分为:可解释的误差 和 不可解释的误差,随机误差必须满足以下四个条件,