Python使用训练数据拟合模型

# 假设“满意度”是因变量,其他的是自变量

# 提取自变量(特征)和因变量(目标)

X = df_filtered_cleaned[['Bonus', 'Enhancement', 'Time_in_seconds']]

y = df_filtered_cleaned['Satisfaction']

# 分割为训练集和测试集。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

print(X_train) + '-' + (X_test)

class MultivariateLinearRegression:

    def __init__(self):

        self.coefficients = None

        self.intercept = None

    def fit(self, X, y):

        """

        使用普通最小二乘法的闭式解来拟合模型。

        X:形状为(n_samples,n_features)的numpy数组

        y:形状为(n_samples,)的numpy数组        """

        # 在输入特征中添加偏置列

        X_b = np.c_[np.ones((X.shape[0], 1)), X]

        # 使用正规方程计算最佳参数

        theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)

        self.intercept = theta_best[0]

        self.coefficients = theta_best[1:]

    def predict(self, X):

        """

        使用训练好的模型进行预测。

        X: numpy数组的形状(n_samples, n_features)

        """

        # 在输入特征中添加偏置列

        X_b = np.c_[np.ones((X.shape[0], 1)), X]

        # 计算预测

        return X_b.dot(np.r_[self.intercept, self.coefficients])

# 初始化线性回归模型

model_custom = MultivariateLinearRegression()

# 使用训练数据拟合模型

model_custom.fit(X_train, y_train)

# 预测测试集的满意度分数

y_pred_custom = model_custom.predict(X_test)

# 计算预测结果的均方误差(MSE)

mse_custom = mean_squared_error(y_test, y_pred_custom)

# 输出模型的系数和均方误差

coefficients_custom = model_custom.coefficients

intercept_custom = model_custom.intercept

# 格式化模型的方程式

model_equation = f"Satisfaction = {intercept_custom:.4f}"

for i, coef in enumerate(coefficients_custom):

    model_equation += f" + ({coef:.4f}) * X{i+1}"

print( mse_custom)

# 由于我们处理的是多个特征,无法绘制一条单独的线。

# 然而,我们可以绘制真实值与预测值之间的图表来观察模型性能。

# 对整个数据集进行满意度评分预测,并将其与真实值进行比较。

y_pred_entire_dataset = model_custom.predict(X)

print(y_pred_entire_dataset)

plt.figure(figsize=(10, 6))

plt.scatter(y, y_pred_entire_dataset, alpha=0.5)

plt.plot([min(y), max(y)], [min(y), max(y)], 'r--')

plt.title('True vs Predicted Satisfaction')

plt.xlabel('True Values')

plt.ylabel('Predicted Values')

plt.show()

plt.savefig('test5.jpg')

你可能感兴趣的:(python)