用矩阵和统计报告估计polynomial线性回归的系数python

对于二次回归模型

y = beta0 + beta1 * x + beta2* x^2 + epsilon

在Python中,我们可以使用NumPy库来构建设计矩阵,并使用线性代数的方法来估计多项式线性回归的系数。

法⼀:矩阵

以下是一个简单的示例,展示了如何使用NumPy来估计一个二次多项式回归模型的系数:

python 复制代码
import numpy as np
# 假设我们有一些数据点
X = np.array([1, 2, 3, 4, 5])  # 自变量
Y = np.array([2, 4, 5, 4, 5])  # 因变量
# 构建设计矩阵
# 对于二次多项式,我们需要添加X的平方项
X_poly = np.vstack([X**2, X, np.ones(len(X))]).T

# 使用NumPy的线性代数工具来计算系数
# np.linalg.inv() 计算逆矩阵,np.dot() 计算矩阵乘法
coefficients = np.linalg.inv(X_poly.T.dot(X_poly)).dot(X_poly.T).dot(Y)

# 打印系数
print("Coefficients:", coefficients)

在这个例子中,X_poly 是一个设计矩阵,它包含了 X 的平方项、X 的一次项和常数项。X_poly.T 是 X_poly 的转置。np.linalg.inv(X_poly.T.dot(X_poly)) 计算了 (X^T X)^(-1),然后我们使用 .dot(X_poly.T).dot(Y) 来计算系数向量。

法二:LinearRegression

如果你想要使用更高级的库,比如 scikit-learn,你可以使用 PolynomialFeatures 来生成多项式特征,然后使用 LinearRegression 来拟合模型:

python 复制代码
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

def my_use_linear_regres(X, Y): 
    # 转换数据的形状
    X = X.reshape(-1, 1)

    # 创建一个PolynomialFeatures实例,degree指定多项式的度数
    poly = PolynomialFeatures(degree=2)   # change this!!!!!!!!!!!!!!!

    # 转换X
    X_poly = poly.fit_transform(X)

    # 创建线性回归模型实例
    model = LinearRegression()

    # 拟合模型
    model.fit(X_poly, Y)
    return model
model_mine = my_use_linear_regres(X, Y)
# 打印系数和截距
print("Coefficients:", model_mine.coef_)  # notice the first one is not meaningful!!! 
print("Intercept:", model_mine.intercept_)  # see intercept here!!!

在这个例子中,PolynomialFeatures 用于生成多项式特征,然后我们使用 LinearRegression 来拟合模型并提取系数。这种方法更加简洁,而且可以轻松地处理更复杂的多项式回归模型。

法三:report

在Python中,我们可以使用statsmodels库来执行线性回归分析,并获取一个详细的统计报告。

python 复制代码
import numpy as np
import statsmodels.api as sm

# 假设我们有一些数据点
X = np.array([1, 2, 3, 4, 5])  # 自变量
Y = np.array([2, 4, 5, 4, 5])  # 因变量

def my_stat_report(X, Y):
        
    # 添加常数项以便拟合截距
    X = sm.add_constant(X)

    # 创建一个二次多项式模型的设计矩阵
    # 注意:这里我们直接使用X[:, 1]来表示x,X[:, 2]来表示x的平方
    X_poly_now = X[:, 1] ** 2
    # X_poly_now = np.column_stack((X[:, 1] ** 2, X[:, 1] ** 3))   # if there are more, use
    print(X_poly_now)
    # 将二次项和一次项添加到设计矩阵中
    X_design = np.column_stack((X, X_poly_now))
    print(X_design)
    # 拟合线性回归模型
    model = sm.OLS(Y, X_design).fit()
    return model

my_model = my_stat_report(X, Y)
print(my_model.summary())

说明

• Dep. Variable: 因变量的名称。

• R-squared: 决定系数,表示模型解释的变异性的比例。

• Adj. R-squared: 调整后的决定系数。

• F-statistic: F统计量,用于检验模型的整体显著性。

• Prob (F-statistic): F统计量的p值。

• Df Residuals: 残差的自由度。

• Df Model: 模型的自由度。

• Covariance Type: 协方差类型。

• coef: 回归系数。

• std err: 回归系数的标准误差。

• t: t统计量。

• P>|t|: t统计量的p值。

• [0.025 0.975]: 回归系数的95%置信区间。

这个统计报告提供了关于模型的详细统计信息,包括系数、标准误差、t统计量、p值和置信区间等。这些信息有助于评估模型的拟合质量和各个预测变量的显著性。


计算预测值 Y_pred 和残差平方和 (RSS)

python 复制代码
# 计算预测值
Y_pred = model.predict(X_poly)

# 计算残差
residuals = Y - Y_pred

# 计算残差平方和 (RSS)
RSS = np.sum(residuals**2)

# 打印预测值和RSS
print("Predicted Y:", Y_pred)
print("Residual Sum of Squares (RSS):", RSS)

在这个代码中,model.predict(X_poly) 用于计算预测值。然后我们计算实际值 Y 和预测值 Y_pred 之间的残差,并将残差平方后求和得到 RSS。

RSS 越小,表示模型的拟合效果越好。RSS 是评估回归模型性能的一个常用指标。

RSE, MSE, TSS, R Square

python 复制代码
# 计算总平方和 (TSS)
Y_mean = np.mean(Y)
TSS = np.sum((Y - Y_mean)**2)

# 计算均方误差 (MSE)
n = len(Y)  # 观测值数量
MSE = RSS / n 

# 计算剩余标准误差 (RSE)
N = len(Y)
p = 1
RSE = np.sqrt(RSS/(N-p-1))

# 计算 R-square
R_square = 1 - RSS / TSS

# 打印统计量
print("Residual Standard Error (RSE):", RSE)
print("Mean Squared Error (MSE):", MSE)
print("Total Sum of Squares (TSS):", TSS)
print("R-square:", R_square)
相关推荐
幸运超级加倍~13 分钟前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
yannan2019031320 分钟前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁30 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev32 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
王俊山IT32 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜1 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python