📅  最后修改于: 2023-12-03 15:19:59.731000             🧑  作者: Mango
Scikit-learn是一个Python机器学习库,它在建模过程中提供了丰富的工具和算法。本文将介绍Scikit-learn建模过程中的关键步骤。
数据准备是建模过程中的第一步。在这一步中,需要将数据集分为训练集和测试集,并进行数据清洗和预处理。
使用Scikit-learn中的train_test_split函数可以将数据集分成训练集和测试集。该函数接受数据集和测试数据所占的比例,并返回分割好的数据。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
该代码片段将数据集分成了训练集和测试集,其中测试集占总数据集的20%。
在构建模型时,数据的质量非常重要。如果数据中存在缺失值或异常值,可能会对模型的性能产生负面影响。使用Scikit-learn提供的预处理工具可以对数据进行清洗和预处理。
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
# 处理缺失值
imputer = SimpleImputer(strategy="median")
imputer.fit(X_train)
X_train = imputer.transform(X_train)
X_test = imputer.transform(X_test)
# 特征缩放
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
该代码片段使用SimpleImputer处理缺失值并使用StandardScaler进行特征缩放。
在数据准备阶段完成后,下一步是选择合适的模型进行训练。Scikit-learn中提供了众多算法和模型,可以根据问题的复杂程度选择适当的模型。
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)
该代码片段使用线性回归算法构建并训练了一个模型。
在训练模型后,需要对其进行评估以了解其性能。Scikit-learn提供了许多评估指标和工具,可以对模型进行评估。
from sklearn.metrics import mean_squared_error
y_pred = lin_reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
该代码片段使用均方误差(MSE)和均方根误差(RMSE)评估了模型的性能。
在数据准备、模型选择和评估之后,可能需要调整模型以提高其表现。使用Scikit-learn提供的工具可以调整模型并找到最佳超参数。
from sklearn.model_selection import GridSearchCV
param_grid = [
{'n_estimators': [3, 10, 30], 'max_features': [2, 4, 6, 8]},
{'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3, 4]},
]
forest_reg = RandomForestRegressor()
grid_search = GridSearchCV(forest_reg, param_grid, cv=5,
scoring='neg_mean_squared_error',
return_train_score=True)
grid_search.fit(X_train, y_train)
该代码片段使用网格搜索调整了随机森林模型的超参数。
在通过数据准备、模型选择、训练和评估优化模型后,可以将模型保存下来以供部署和使用。
import joblib
joblib.dump(lin_reg, "lin_reg_model.pkl")
该代码片段将线性回归模型保存到了Pickle文件中。
可以使用以下代码加载模型并使用它进行预测。
lin_reg_loaded = joblib.load("lin_reg_model.pkl")
y_pred = lin_reg_loaded.predict(X_test)