吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 380|回复: 7
收起左侧

[经验求助] python代码求助

[复制链接]
560209673 发表于 2024-8-2 18:42
164吾爱币
求一段多元线性回归模型的python代码,
函数为ln(p/1-p)=b0+b1x1+b2x2+...+bnxn
n最多八九个吧,数据组可以上千,
希望有注释,另一个帖子的1000币一并结给大佬,感谢
求视频库地址
https://www.52pojie.cn/thread-1719311-1-1.html
(出处: 吾爱破解论坛)

最佳答案

查看完整内容

看看……是不是楼主需要的结果啊? [mw_shl_code=python,true]# 导入所需的库 import numpy as np # 用于数学运算 from sklearn.linear_model import LinearRegression # 线性回归模型 import matplotlib.pyplot as plt # 用于数据可视化 # 设置随机种子以保证结果的可重复性 np.random.seed(0) # 定义样本数量 n_samples = 2222 # 生成4个特征的随机数据,假设每个特征都来自标准正态分布 X = np.ra ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

shuisanyue 发表于 2024-8-2 18:42
看看……是不是楼主需要的结果啊?





[Python] 纯文本查看 复制代码
# 导入所需的库
import numpy as np  # 用于数学运算
from sklearn.linear_model import LinearRegression  # 线性回归模型
import matplotlib.pyplot as plt  # 用于数据可视化

# 设置随机种子以保证结果的可重复性
np.random.seed(0)

# 定义样本数量
n_samples = 2222

# 生成4个特征的随机数据,假设每个特征都来自标准正态分布
X = np.random.randn(n_samples, 4)  # X的形状是(n_samples, 4)

# 定义一个多元线性回归模型的函数,简化为4个特征
def model(X, b0, b1, b2, b3):
    return b0 + b1*X[:,0] + b2*X[:,1] + b3*X[:,2] + b3*X[:,3]  # 简化的线性模型

# 生成目标变量y,使用模型函数生成,并添加一些高斯噪声
y = model(X, 0.5, 1.5, -1.0, 0.5) + np.random.randn(n_samples) * 0.1

# 创建LinearRegression实例,用于多元线性回归
lr_model = LinearRegression()

# 使用fit方法拟合模型,X是特征数据,y是目标数据
lr_model.fit(X, y)

# 打印出模型的参数,即每个特征的系数
print("模型参数:")
for i, coef in enumerate(lr_model.coef_):
    print(f"b{i+1}: {coef}")

# 使用拟合好的模型对特征数据进行预测
y_pred = lr_model.predict(X)

# 使用matplotlib库绘制原始数据点和模型预测的拟合线
# 这里我们只绘制第一个特征与目标变量的关系
plt.scatter(X[:, 0], y, color='blue')  # 绘制原始数据点,使用第一个特征
plt.plot(X[:, 0], y_pred, color='red')  # 绘制拟合线,使用第一个特征
plt.title('多元线性回归拟合')  # 设置图形的标题
plt.xlabel('特征1')  # 设置x轴标签,表示使用的是第一个特征
plt.ylabel('目标变量')  # 设置y轴标签
plt.show()  # 显示图形
jing99 发表于 2024-8-2 20:25
deathknight 发表于 2024-8-2 20:37
[Python] 纯文本查看 复制代码
[mw_shl_code=python,true]import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# 假设你已经有了一个DataFrame df,它包含了数据
# 这里我们创建一些模拟数据来演示
np.random.seed(0)
n_samples = 1000
n_features = 8  # 假设有8个特征

X = np.random.rand(n_samples, n_features)  # 随机生成自变量
# 假设真实系数为 [1, 2, 3, 4, 5, 6, 7, 8]
true_coef = np.arange(1, n_features + 1)
# 生成因变量(p是介于0和1之间的随机值,然后计算ln(p/(1-p)))
p = np.random.rand(n_samples)
y = np.log(p / (1 - p)) + np.random.randn(n_samples) * 0.1  # 添加一些噪声

# 将数据放入DataFrame中
df = pd.DataFrame(X, columns=[f'x{i+1}' for i in range(n_features)])
df['y'] = y

# 分割数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df.drop('y', axis=1), df['y'], test_size=0.2, random_state=42)

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

# 训练模型
model.fit(X_train, y_train)

# 预测测试集
y_pred = model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f"模型的均方误差(MSE)为: {mse}")

# 打印模型系数
print(f"模型系数: {model.coef_}")
print(f"模型截距: {model.intercept_}")


# 代码纯AI生成,我在大学的时候学过回归预测方程,不过已经忘完了qwq😢[/mw_shl_code]
shuisanyue 发表于 2024-8-2 21:37
楼主看看这个可以吗?




[Python] 纯文本查看 复制代码
#展示了如何使用Python进行多元线性回归分析,包括数据生成、模型训练、参数输出、
#模型评估以及结果的可视化。代码中还包含了设置中文字体的步骤,以确保在matplotlib生成的图表中中文能够正确显示。
# 以确保在matplotlib生成的图表中中文能够正确显示。
# 导入所需的库
import numpy as np  # 导入NumPy库,用于进行数学运算
from sklearn.linear_model import LinearRegression  # 从scikit-learn库导入线性回归模型
import matplotlib.pyplot as plt  # 导入matplotlib的pyplot模块,用于数据可视化
from matplotlib.font_manager import FontProperties  # 导入FontProperties,用于指定字体
from sklearn.metrics import mean_squared_error  # 导入mean_squared_error,用于计算均方误差
# 设置随机种子以保证结果的可重复性
np.random.seed(0)
# 定义样本数量
n_samples = 2222  # 设置样本数为2222
# 生成4个特征的随机数据,假设每个特征都来自标准正态分布
X = np.random.randn(n_samples, 4)  # 生成一个形状为(2222, 4)的随机正态分布矩阵
# 定义一个多元线性回归模型的函数,简化为4个特征
def model(X, b0, b1, b2, b3):
    # 定义模型的线性表达式,包括截距b0和系数b1, b2, b3
    return b0 + b1*X[:,0] + b2*X[:,1] + b3*X[:,2] + b3*X[:,3]

# 生成目标变量y,使用模型函数生成,并添加一些高斯噪声
y = model(X, 0.5, 1.5, -1.0, 0.5) + np.random.randn(n_samples) * 0.1  # 根据模型生成y并添加噪声
# 创建LinearRegression实例,用于多元线性回归
lr_model = LinearRegression()  # 实例化线性回归模型
# 使用fit方法拟合模型,X是特征数据,y是目标数据
lr_model.fit(X, y)  # 拟合模型
# 打印模型参数,即每个特征的系数和截距
print("模型参数:")
for i, coef in enumerate(lr_model.coef_):
    print(f"b{i+1}: {coef}")  # 打印每个特征的系数
print(f"截距: {lr_model.intercept_}")  # 打印截距
# 计算R²分数,评估模型的拟合优度
r_squared = lr_model.score(X, y)
print(f"R²分数: {r_squared}")  # 打印R²分数
# 使用拟合好的模型对特征数据进行预测
y_pred = lr_model.predict(X)  # 根据模型进行预测
# 设置中文字体,以确保中文能够正确显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置默认字体为SimHei
plt.rcParams['axes.unicode_minus'] = False  # 确保负号显示正常
# 绘制数据点和拟合线
plt.scatter(X[:, 0], y, color='blue', label='原始数据')  # 绘制第一个特征与目标变量的散点图
plt.plot(X[:, 0], y_pred, color='red', label='拟合线')  # 绘制第一个特征的拟合线
# 添加图例
plt.legend()  # 显示图例
# 设置图表标题和轴标签
plt.title('多元线性回归拟合')  # 设置图表标题
plt.xlabel('特征1')  # 设置x轴标签
plt.ylabel('目标变量')  # 设置y轴标签
# 显示图表
plt.show()  # 显示图表
# 以下是计算测试集上均方误差(MSE)的示例代码,需要您提供测试数据集
# 以下是注释掉的代码,因为测试数据集没有在这段代码中定义
# 如果您有测试数据集,请取消注释并使用您的数据
# y_pred_test = lr_model.predict(X_test)  # 使用模型对测试数据集进行预测
# mse_test = mean_squared_error(y_test, y_pred_test)  # 计算测试数据集上的MSE
# print(f"测试集上的均方误差(MSE): {mse_test}")  # 打印MSE
# 绘制残差图,分析模型的预测准确性
residuals = y - y_pred  # 计算残差
# 绘制残差图
plt.scatter(y_pred, residuals, color='blue', label='残差')  # 绘制残差散点图
plt.hlines(y=0, xmin=y_pred.min(), xmax=y_pred.max(), color='red', label='残差为0')  # 绘制残差为0的水平线
# 添加图例和轴标签
plt.legend()  # 显示图例
plt.title('残差图')  # 设置图表标题
plt.xlabel('预测值')  # 设置x轴标签
plt.ylabel('残差')  # 设置y轴标签
# 显示残差图
plt.show()  # 显示图表

 楼主| 560209673 发表于 2024-8-3 09:58
deathknight 发表于 2024-8-2 20:37
[mw_shl_code=python,true][mw_shl_code=python,true]import pandas as pd
from sklearn.linear_model imp ...

和我的方程差的有点远啊
lixiaoyao666 发表于 2024-8-3 11:15
[Python] 纯文本查看 复制代码
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

M = 1000 #样本个数
N = 8 # b0-bn中N的值
eps = 1e-20 #定义一个很小的量
#函数为ln(p/1-p)=b0+b1x1+b2x2+...+bnxn,假设n=8

def p2y(p): # 定义p到y的转换
    #p必须在0-1之间,否则ln(p/1-p)无意义
    p[p<0]=p[p<0]+eps
    p[p>1]=p[p>1]-eps
    return np.log(p / (1 - p))

def y2p(y): # 定义y到p的转换
    return np.exp(y) / (1 + np.exp(y))

def generate_data(): # 生成数据p,x ,请用真实数据代替
    np.random.seed(0)
    x = np.random.rand(M, N)  # 随机生成 N 个 8 维的数据X
    b0 = 5.0 #定义真实截取
    b1_bn = np.array([1, 2, 3, 4, 5, 6, 7, 8])  #定义真实系数
    y = b0 + np.dot(x, b1_bn) + (np.random.normal(0, 1, M)-0.5) * 0.01 # 计算 y 并增加随机波动
    p = y2p(y) #生成p
    return x, p

def multi_linear_regression(x, p):
    model = LinearRegression()
    model.fit(x, p2y(p))
    b0 = model.intercept_ # 给出预测截距
    b1_bn = model.coef_   # 给出预测系数
    return b0, b1_bn

x, p = generate_data() #产生模拟数据,请用真实数据代替
b0, b1_bn = multi_linear_regression(x, p) #多元线性回归计算系数
pred_p = y2p(b0 + np.dot(x, b1_bn)) # 计算预测出的p


#打印预测的b0,b1_bn, 和我们设定的值很接近
print("截距 b0:", b0)
print("系数 b1 到 bn:", b1_bn)
#评估模型:计算预测值和真实值的误差
mse = mean_squared_error(p, pred_p)
print(f"模型的均方误差(MSE)为: {mse}")


输出结果如下:
[Plain Text] 纯文本查看 复制代码
截距 b0: 4.992559590940921
系数 b1 到 bn: [1.00006561 2.00135051 2.99976941 4.00046542 5.00017882 6.00166107
 7.00108371 7.99973294]
模型的均方误差(MSE)为: 2.871005772476143e-15
lixiaoyao666 发表于 2024-8-3 11:26
lixiaoyao666 发表于 2024-8-3 11:15
[mw_shl_code=python,true]import numpy as np
from sklearn.linear_model import LinearRegression
from ...

你给的函数就是ln(p/1-p)=b0+b1x1+b2x2+...+bnxn
很简单的任务,如果要划分训练集测试集之前几楼的代码已经给了范例

除非你的数据不符合你给出的函数,那么需要提供部分数据才能判断用什么函数拟合较好
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 03:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表