import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn import preprocessing
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
# 读取含有热误差数据的CSV文件
train_file = open('data8.csv', encoding='utf-8')
train_df = pd.read_csv(train_file)
# 读取测试集的含有热误差数据的CSV文件
test_file = open('data.csv', encoding='utf-8')
test_df = pd.read_csv(test_file)
# 对训练集进行数据预处理
X_train = train_df.iloc[:, :-1]
Y_train = train_df.iloc[:, -1]
X_train_scaled = preprocessing.scale(X_train)
# 对测试集进行数据预处理
X_test = test_df.iloc[:, :-1]
Y_test = test_df.iloc[:, -1]
X_test_scaled = preprocessing.scale(X_test, with_mean=X_train_scaled.mean(axis=0)[0], with_std=X_train_scaled.mean(axis=0)[0])
X = pd.concat([test_df.iloc[:, :-1], train_df.iloc[:, :-1]], axis=1)
Y = pd.concat([test_df.iloc[:, -1], train_df.iloc[:, -1]], axis=1)
X_test.columns = X_train.columns
# 创建决策树模型
dt = DecisionTreeRegressor()
# 定义网格搜索参数
param_grid = {
'max_depth': [1,2,3,4,5,6,7,8,9],
'min_samples_split': [2, 4, 6],
'min_samples_leaf': [1, 2, 3]
}
# 进行网格搜索优化
grid = GridSearchCV(dt, param_grid, cv=5)
grid.fit(X, Y)
grid_search = GridSearchCV(DecisionTreeRegressor(), param_grid, cv=5)
grid_search.fit(X_train, Y_train)
best_model = grid_search.best_estimator_
# 输出最优参数和模型得分
print('Best Parameters:', grid.best_params_)
# 定义新的温度数据
# 输出预测结果
Y_pred = best_model.predict(X_test)
mse = mean_squared_error(Y_test, Y_pred)
print(f"MSE: {mse:.4f}")
print(Y_pred)
X_test = pd.concat([X_train, X_test], axis=0, ignore_index=True)
能不能加点功能,考虑转速以及环境温度对预测结果的影响,在预测时添加这两个因素对结果的影响
当考虑转速和环境温度对预测结果的影响时,可以将这两个因素作为特征加入到训练集和测试集中,然后重新进行数据预处理和模型训练。以下是可能的步骤:
读取转速和环境温度的数据:从合适的数据源(例如CSV文件、数据库等)读取转速和环境温度的数据,并将其转换为可以与训练集和测试集对应的形式。
合并转速和环境温度数据:将转速和环境温度的数据与训练集和测试集的数据进行合并,可以使用 pandas 提供的 concat 函数或者其他合并数据的方式,确保转速和环境温度的数据与其他特征对应的数据在同一行。
进行数据预处理:对合并后的数据进行数据预处理,包括特征选择、特征缩放等步骤。可以使用 preprocessing 模块中提供的函数对转速和环境温度的数据进行缩放或者其他处理。
创建决策树模型:根据需求重新创建决策树模型,可以使用 DecisionTreeRegressor 类或其他合适的模型类,设置模型的超参数。
进行模型训练:使用合并后的数据集进行模型训练,可以使用 fit 方法进行模型的训练。
进行预测:使用训练好的模型对测试集进行预测,可以使用 predict 方法进行预测操作。
输出预测结果和评估模型:根据需要输出预测结果,并使用合适的评估指标(例如均方误差、平均绝对误差等)对模型的性能进行评估。
以下是一种可能的示例代码,展示了如何在预测时添加转速和环境温度对结果的影响:
import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn import preprocessing
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
# 读取含有热误差数据的CSV文件
train_file = open('data8.csv', encoding='utf-8')
train_df = pd.read_csv(train_file)
# 读取测试集的含有热误差数据的CSV文件
test_file = open('data.csv', encoding='utf-8')
test_df = pd.read_csv(test_file)
# 对训练集进行数据预处理
X_train = train_df.iloc[:, :-1]
Y_train = train_df.iloc[:, -1]
X_train_scaled = preprocessing.scale(X_train)
# 对测试集进行数据预处理
X_test = test_df.iloc[:, :-1]
Y_test = test_df.iloc[:, -1]
X_test_scaled = preprocessing.scale(X_test, with_mean=X_train_scaled.mean(axis=0)[0], with_std=X_train_scaled.mean(axis=0)[0])
# 添加转速和环境温度作为新的特征
X_train['转速'] = train_df['转速']
X_train['环境温度'] = train_df['环境温度']
X_test['转速'] = test_df['转速']
X_test['环境温度'] = test_df['环境温度']
# 创建决策树模型
dt = DecisionTreeRegressor()
# 定义网格搜索参数
param_grid = {
'max_depth': [1,2,3,4,5,6,7,8,9],
'min_samples_split': [2, 4, 6],
'min_samples_leaf': [1, 2, 3]
}
# 进行网格搜索优化
grid = GridSearchCV(dt, param_grid, cv=5)
grid.fit(X_train, Y_train)
best_model = grid.best_estimator_
# 输出最优参数和模型得分
print('最佳参数:', grid.best_params_)
# 输出预测结果
Y_pred = best_model.predict(X_test)
mse = mean_squared_error(Y_test, Y_pred)
print(f"均方误差(MSE): {mse:.4f}")
print(Y_pred)
由公式观察可知,最大后验估计不仅要极大似然函数的θ最大,还要后验概率的θ最大
,因此最大后验估计能影响参数的值朝着先验偏移。最大后验的优点是能够利用先验的信息,因为这些信息是无法从观测数据中得到的,从而减少了模型的方差,但是代价是增加了偏差。