添加特征的平方或者立方可以改进线性回归模型,其他的变换通常也对变换某些特征有用,特别是应用数学函数,如log,exp或sin。虽然基于树的模型只关注特征的顺序,但线性模型和神经网络依赖于每个特征的尺度和分布。如果特征与目标之间存在非线性关系,那么建模就变得非常困难,特别是对于回归问题。log和exp函数可以帮助调节数据的相对比例,从而改变线性模型和神经网络的学习效果。此外,大部分模型都在每个特征(在回归问题中还包括目标值)大致遵循高斯分布时表现最好,也就是说,每个特征的直方图应该类似于熟悉的钟形曲线。
1.生成数据集
rnd = np.random.RandomState(0)
X_org = rnd.normal(size=(1000, 3))
w = rnd.normal(size=3)
X = rnd.poisson(10 * np.exp(X_org))
y = np.dot(X_org, w)
bins = np.bincount(X[:, 0])
plt.bar(range(len(bins)), bins, color='grey')
plt.ylabel("Number of appearances")
plt.xlabel("Value")
<