Python线性回归模型:寻找最佳拟合优度
Python线性回归模型:寻找最佳拟合优度
本文将介绍如何使用Python的pandas和Scikit-learn库,通过随机取样和循环迭代,找到线性回归模型的最佳拟合优度(R方),并输出最终的拟合方程。
1. 导入库和模块
首先,我们需要导入所需的库和模块:pythonimport pandas as pdfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import r2_scoreimport random
2. 读取数据
使用pandas读取Excel文件中的数据:pythondata = pd.read_excel('会员信息数据.xlsx') data.dropna(inplace=True) # 删除包含缺失值的行
请注意: 将'会员信息数据.xlsx'替换为您的实际文件路径。
3. 定义特征和目标变量pythonX = data[['信誉值均值', '预订任务限额均值', '商品周围商品个数', '会员点个数']]y = data['任务标价']
4. 随机取样和拟合模型
定义一个函数来计算线性回归的拟合优度:pythondef calculate_r2(X, y): model = LinearRegression() model.fit(X, y) y_pred = model.predict(X) r2 = r2_score(y, y_pred) return r2
使用循环不断取样并计算拟合优度,直到找到拟合度大于0.5的样本:pythonrandom.seed(0) # 设置随机数种子r2 = 0while r2 < 0.5: sample_data = data.sample(n=100) X_sample = sample_data[['信誉值均值', '预订任务限额均值', '商品周围商品个数', '会员点个数']] y_sample = sample_data['任务标价'] r2 = calculate_r2(X_sample, y_sample)
5. 输出拟合方程
使用拟合优度最高的样本来训练线性回归模型,并输出拟合方程:pythonmodel = LinearRegression()model.fit(X_sample, y_sample)equation = '任务标价 = 'for i, coef in enumerate(model.coef_): equation += f'{coef:.2f} * {X_sample.columns[i]} + 'equation += f'{model.intercept_:.2f}'print(f'拟合优度(R方):{r2:.4f}')print(f'拟合方程:{equation}')
**完整代码:**pythonimport pandas as pdfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import r2_scoreimport random
data = pd.read_excel('会员信息数据.xlsx')data.dropna(inplace=True)
X = data[['信誉值均值', '预订任务限额均值', '商品周围商品个数', '会员点个数']]y = data['任务标价']
def calculate_r2(X, y): model = LinearRegression() model.fit(X, y) y_pred = model.predict(X) r2 = r2_score(y, y_pred) return r2
random.seed(0)r2 = 0while r2 < 0.5: sample_data = data.sample(n=100) X_sample = sample_data[['信誉值均值', '预订任务限额均值', '商品周围商品个数', '会员点个数']] y_sample = sample_data['任务标价'] r2 = calculate_r2(X_sample, y_sample)
model = LinearRegression()model.fit(X_sample, y_sample)equation = '任务标价 = 'for i, coef in enumerate(model.coef_): equation += f'{coef:.2f} * {X_sample.columns[i]} + 'equation += f'{model.intercept_:.2f}'print(f'拟合优度(R方):{r2:.4f}')print(f'拟合方程:{equation}')
注意: - 以上代码仅供参考,您需要根据实际情况修改文件路径和相关参数。- 由于随机取样的特性,每次运行代码得到的结果可能略有不同。
原文地址: https://www.cveoy.top/t/topic/fzTd 著作权归作者所有。请勿转载和采集!