Python多元非线性回归预测算法

程序示例精选
Python多元非线性回归预测算法
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《Python多元非线性回归预测算法》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


运行结果


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. Python
       2. Pycharm

二、使用步骤

代码如下(示例):

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


def critic_weights(data):
    """
    计算CRITIC权重
    :param data: 数据集,其中行为样本,列为特征
    :return: 每个特征的权重
    """
    # 标准化数据
    data_std = (data - np.mean(data, axis=0)) / np.std(data, axis=0)
    
    # 计算标准差
    std_devs = np.std(data_std, axis=0)
    
    # 计算相关系数矩阵
    corr_matrix = np.corrcoef(data_std, rowvar=False)
    corr_matrix = np.nan_to_num(corr_matrix)  # 旧版本的兼容方式:直接替换NaN值而不使用关键字参数

    # 计算冲突矩阵(1-|相关系数|)
    conflict_matrix = 1 - np.abs(corr_matrix)
    
    # 计算每个特征的信息量
    criteria = std_devs * np.sum(conflict_matrix, axis=1)
    
    # 计算权重
    weights = criteria / np.sum(criteria)
    
    return weights



# 根据模拟数据计算交通量
traffic = 10 * weather + 5 * holiday + 8 * location + 15 * incident + np.random.rand(num_samples) * 10

# 创建DataFrame保存模拟数据
df = pd.DataFrame({
    'Date': dates,
    'Weather': weather,
    'Holiday': holiday,
    'Location': location,
    'Incident': incident,
    'Traffic': traffic
})

# 保存数据到Excel文件
excel_path = 'simulated_data_with_features.xlsx'
df.to_excel(excel_path, index=False)

print(f"模拟数据已保存到 {excel_path}")

# 读取Excel文件
df = pd.read_excel(excel_path)

# 提取特征和目标变量,不包括日期
X = df.drop(['Traffic', 'Date'], axis=1)
y = df['Traffic']

# 分割数据集,同时保留日期信息用于测试集
X_train, X_test, y_train, y_test, dates_train, dates_test = train_test_split(X, y, df['Date'], test_size=0.2, random_state=42)

# 计算特征权重
feature_weights = critic_weights(X_train.values)
print("特征权重:", feature_weights)

# 使用多项式特征转换输入数据
poly = PolynomialFeatures(degree=3)
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.transform(X_test)

# 根据特征权重对训练和测试数据进行加权
X_train_weighted = X_train * feature_weights
X_test_weighted = X_test * feature_weights

# 训练多元非线性回归模型
model = LinearRegression()
model.fit(X_train_poly, y_train)

# 预测
y_pred = model.predict(X_test_poly)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

# 预测未来7天的客流量
future_dates = pd.date_range(start=dates.max(), periods=7)[1:]  # 排除当前日期
future_X_weighted = np.random.rand(6, 4) * feature_weights  # 

# 创建DataFrame保存预测结果
future_df = pd.DataFrame({
    'Date': future_dates,
    'Predicted Traffic': predicted_flow_future
})

# 将未来预测的日期和预测值与测试集的日期和预测值连接起来
dates_combined = np.concatenate([dates_test, future_dates])
y_pred_combined = np.concatenate([y_pred, predicted_flow_future])

# 绘制实际与预测的客流量曲线图,x轴使用日期
plt.figure(figsize=(12, 6))

# 排序实际数据
test_df = pd.DataFrame({
    'Date': dates_combined,
    'Actual Traffic': np.concatenate([y_test, np.full(6, np.nan)]),  # 在预测的未来日期上填充NaN值
    'Predicted Traffic': y_pred_combined
})
test_df = test_df.sort_values(by='Date')

plt.plot(test_df['Date'], test_df['Actual Traffic'], label='Actual Traffic', marker='o', linestyle='-')
plt.plot(test_df['Date'], test_df['Predicted Traffic'], label='Predicted Traffic', marker='x', linestyle='--')

# 设置y轴的最大最小值
y_min = min(y_test.min(), y_pred.min(), predicted_flow_future.min()) - 100
y_max = max(y_test.max(), y_pred.max(), predicted_flow_future.max()) + 100
plt.ylim(y_min, y_max)

plt.title('Actual vs Predicted Traffic')
plt.xlabel('Date')
plt.ylabel('Traffic')
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()
plt.show()


运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷塘月色2

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值