Python Scikit-Learn 高级教程:高级特征工程
特征工程是机器学习中不可或缺的一部分,而高级特征工程则涉及更复杂的技术和方法。本篇博客将深入介绍在 Scikit-Learn 中进行高级特征工程的一些常见技术,包括多项式特征、交互特征、特征选择和特征转换等,并提供详细的代码示例。
1. 多项式特征
多项式特征是原始特征的多项式组合,通过增加特征的高次数,可以更好地捕捉特征之间的非线性关系。在 Scikit-Learn 中,可以使用 PolynomialFeatures 来生成多项式特征。
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
# 生成示例数据集
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# 使用多项式特征扩展原始特征
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)
# 使用线性回归拟合多项式特征
model = LinearRegression()
model.fit(X_poly, y)
# 预测
X_test = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)
X_test_poly = poly.transform(X_test)
y_pred = model.predict(X_test_poly)
# 可视化结果
plt.scatter(X, y, label='原始数据')
plt.plot(X_test, y_pred, color='red', label='多项式回归')
plt.legend()
plt.show()
2. 交互特征
交互特征是特征之间相互作用的结果,可以通过 PolynomialFeatures 或自定义操作来创建。例如,可以使用 preprocessing 模块中的 interaction_terms 函数来生成交互特征。
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
# 生成示例数据集
X, y = make_regression(n_samples=100, n_features=2, noise=10, random_state=42)
# 使用多项式特征扩展原始特征
poly = PolynomialFeatures(degree=2, interaction_only=True)
X_poly = poly.fit_transform(X)
# 使用线性回归拟合多项式特征
model = LinearRegression()
model.fit(X_poly, y)
3. 特征选择
特征选择是从原始特征集中选择最相关的特征的过程,以提高模型性能或减少过拟合风险。Scikit-Learn 提供了多种特征选择的方法,如基于统计学的方法和基于模型的方法。
from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
# 生成示例数据集
X, y = make_regression(n_samples=100, n_features=5, noise=10, random_state=42)
# 使用SelectKBest选择最相关的特征
selector = SelectKBest(score_func=f_regression, k=2)
X_selected = selector.fit_transform(X, y)
# 使用线性回归拟合选择的特征
model = LinearRegression()
model.fit(X_selected, y)
4. 特征转换
特征转换是将原始特征映射到新的特征空间的过程,其中包括主成分分析(PCA)、t-分布邻域嵌入(t-SNE)等方法。
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 加载示例数据集
iris = load_iris()
X = iris.data
y = iris.target
# 使用PCA进行特征转换
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 可视化结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', edgecolor='k', s=50)
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.title('PCA变换后的特征空间')
plt.show()
5. 总结
本篇博客深入介绍了在 Scikit-Learn 中进行高级特征工程的一些常见技术,包括多项式特征、交互特征、特征选择和特征转换等。这些技术能够帮助你更好地处理原始特征,提高模型性能并增强对数据的理解。希望这篇博客对你在实际应用中进行高级特征工程时有所帮助!