Python机器学习:特征工程与模型调优
在机器学习的世界里,数据是王,而特征工程和模型调优则是通往王座的必经之路。本文将带你深入探讨如何在Python中通过特征工程和模型调优,提升机器学习模型的性能。

特征工程:数据的魔法
数据预处理
首先,数据预处理是特征工程的基础。原始数据往往包含噪声、缺失值和不一致性问题。使用Pandas库,我们可以轻松处理这些问题:
import pandas as pd
# 读取数据
data = pd.read_csv('data.csv')
# 处理缺失值
data.fillna(method='ffill', inplace=True)
# 去除重复值
data.drop_duplicates(inplace=True)
特征选择
特征选择是决定模型性能的关键步骤。通过选择最有信息的特征,可以减少模型的复杂度,提高泛化能力。使用Scikit-learn库中的SelectKBest可以实现这一目标:
from sklearn.feature_selection import SelectKBest, chi2
# 选择前10个最佳特征
selector = SelectKBest(score_func=chi2, k=10)
X_new = selector.fit_transform(X, y)
特征转换
特征转换包括归一化、标准化和独热编码等。归一化可以将特征缩放到[0, 1]区间,而标准化则将特征转换为均值为0、标准差为1的标准正态分布:
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# 归一化
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
# 标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
模型调优:艺术的雕琢
选择合适的模型
不同的机器学习模型适用于不同类型的数据和任务。例如,决策树适合处理非线性关系,而线性回归则适用于线性数据:
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LinearRegression
# 决策树
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
# 线性回归
lr = LinearRegression()
lr.fit(X_train, y_train)
超参数调优
超参数调优是提升模型性能的重要手段。GridSearchCV和RandomizedSearchCV是常用的超参数搜索方法:
from sklearn.model_selection import GridSearchCV
# 定义参数网格
param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 5, 10]}
# GridSearchCV
grid_search = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
best_params = grid_search.best_params_
交叉验证
交叉验证可以有效评估模型的泛化能力。K折交叉验证是最常用的方法之一:
from sklearn.model_selection import cross_val_score
# 5折交叉验证
scores = cross_val_score(dt, X, y, cv=5)
print(f'平均准确率: {scores.mean()}')
实战案例:房价预测
让我们通过一个房价预测案例,将上述知识付诸实践:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
# 读取数据
data = pd.read_csv('housing.csv')
# 特征工程
X = data.drop('price', axis=1)
y = data['price']
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 模型训练
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# 模型评估
y_pred = rf.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f'MSE: {mse}')
通过特征工程和模型调优,我们成功构建了一个性能优良的房价预测模型。
特征工程和模型调优是机器学习中的两大支柱。掌握这些技巧,你将能够在Python中构建出更加精准和高效的机器学习模型。希望本文能为你在这条道路上提供一些启示和帮助。