机器学习项目记录

一 数据归一化后,测试数据怎么转换为同一逻辑

使用 preprocessing.MinMaxScaler() 进行归一化后,可以使用以下方法保存用于归一化的参数:

1 在训练阶段,创建并拟合 MinMaxScaler 对象,将其应用于训练数据,并 获取归一化的参数

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(train_data)

# 获取归一化的参数
min_val = scaler.data_min_
max_val = scaler.data_max_

2 将归一化的参数保存到文件中,例如使用 pickle 库:

import pickle

# 将归一化的参数保存到文件中
with open('scaler_params.pkl', 'wb') as file:
    pickle.dump((min_val, max_val), file)

3 在测试或实际运行阶段,加载保存的归一化参数并应用于新数据:

import pickle

# 加载归一化的参数
with open('scaler_params.pkl', 'rb') as file:
    min_val, max_val = pickle.load(file)

# 应用归一化参数到新数据
normalized_data = (new_data - min_val) / (max_val - min_val)

二 R2 和 RMSE 评价体系

2.1 R2(决定系数)

计算公式为: R2 = 1 - (SSR / SST) 其中,SSR 是回归平方和(Sum of Squares of Residuals),表示回归模型的拟合误差; SST 是总平方和(Total Sum of Squares),表示总体数据的离散程度。

R2 的计算结果越接近 1,说明模型能够较好地解释观测数据的变化,拟合效果较好

from sklearn.metrics import r2_score
 
# y_true为实际观测值,y_pred为模型预测值
r2 = r2_score(y_true, y_pred)

2.2 RMSE (均方根误差)

mean_squared_error 函数会计算 y_truey_pred 之间的平均平方误差,并返回一个表示评分结果的浮点数。得分越低表示模型的预测结果与真实值之间的误差越小,模型的性能越好。

from sklearn.metrics import mean_squared_error
mse_score = mean_squared_error(y_true, y_pred)

三 K近邻回归

for i in range(3,10):
    clf = KNeighborsRegressor(n_neighbors=i) # 最近三个
    clf.fit(X_train, y_train)
    
    print(f'系数{i}:K近邻回归 R2 决定系数:', r2_score(y_valid, clf.predict(X_valid)))  
    print(f'系数{i}:K近邻回归 均方根误差:', mean_squared_error(y_valid, clf.predict(X_valid)))

K近邻回归(K-Nearest Neighbors Regression)是一种机器学习算法,用于解决回归问题。它基于一个简单的假设:与一个样本在特征空间中相近的其他样本,其目标变量值也应该相近。因此,K近邻回归通过查找最接近待预测样本的K个最近邻样本,并根据它们的目标变量值来预测待预测样本的目标变量值。

K近邻回归的步骤如下:

  1. 计算待预测样本与训练集中所有样本的距离,通常使用欧氏距离或曼哈顿距离等距离度量方法。

  2. 选择K个与待预测样本距离最近的训练样本,这些训练样本被称为K个最近邻样本。

  3. 对于回归问题,计算K个最近邻样本的目标变量值的平均值或加权平均值,作为待预测样本的预测值。加权平均值的计算中,通常使用距离作为权重,距离越近的样本权重越大。

K近邻回归的特点是简单且易于理解,它没有显式的训练过程,只需存储训练数据。在预测阶段,它根据与待预测样本最接近的训练样本的目标变量值来进行预测

需要注意的是,K近邻回归的性能受K值的选择和距离度量方法的影响。较小的K值会增加模型的复杂度,可能会过拟合数据,而较大的K值可能会忽略局部特征。因此,在应用K近邻回归时需要进行参数调优。

四 网格搜索最佳参数 (Grid Search)

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import r2_score, mean_squared_error

# 定义参数空间
param_grid = {
    'n_estimators': [100, 200, 300],
    'max_depth': [5, 10, 15],
    'subsample': [0.6, 0.8, 1.0],
    'colsample_bytree': [0.6, 0.8, 1.0],
    'learning_rate': [0.001, 0.01, 0.1, 1, 10],
    'gamma': [0, 0.1, 0.2],
    'reg_lambda': [0, 0.1, 1],
    'reg_alpha': [0, 0.1, 1]
}

# 创建 XGBRFRegressor 模型
model = XGBRFRegressor(verbosity=1)

# 使用网格搜索进行参数调优
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 输出最佳参数组合和对应的模型性能
print("Best Parameters:", grid_search.best_params_)
print("Best Score:", grid_search.best_score_)

# 获取最佳参数模型
best_model = grid_search.best_estimator_

# 在验证集上进行预测
y_pred = best_model.predict(X_valid)

# 输出 R2 决定系数和均方根误差
print("R2 决定系数:", r2_score(y_valid, y_pred))
print("均方根误差:", mean_squared_error(y_valid, y_pred))

猜你喜欢

转载自blog.csdn.net/March_A/article/details/131226821
今日推荐