用sklearn的PolynomialFeatures无法理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用sklearn的PolynomialFeatures无法理解相关的知识,希望对你有一定的参考价值。
在sklearn的Polynomial Features中需要帮助。它对一个功能很有效,但每当我添加多个功能时,除了提升到度数的值之外,它还会在数组中输出一些值。例如:对于这个数组,
X=np.array([[230.1,37.8,69.2]])
当我尝试
X_poly=poly.fit_transform(X)
它输出
[[ 1.00000000e+00 2.30100000e+02 3.78000000e+01 6.92000000e+01
5.29460100e+04 8.69778000e+03 1.59229200e+04 1.42884000e+03
2.61576000e+03 4.78864000e+03]]
在这里,什么是8.69778000e+03,1.59229200e+04,2.61576000e+03
?
如果你有[a, b, c]
的特征,那么默认的多项式特征(在sklearn
中度数是2)应该是[1, a, b, c, a^2, b^2, c^2, ab, bc, ca]
。
2.61576000e+03
是37.8x62.2=2615,76
(2615,76 = 2.61576000 x 10^3
)
使用PolynomialFeatures
以简单的方式,您可以创建新功能。有一个很好的参考here。当然使用PolynomialFeatures
有一些缺点(“过度拟合”)(参见here)。
编辑:
使用多项式特征时我们必须要小心。计算多项式特征数的公式是N(n,d)=C(n+d,d)
,其中n
是特征的数量,d
是多项式的次数,C
是二项式系数(组合)。在我们的例子中,数字是C(3+2,2)=5!/(5-2)!2!=10
但是当特征的数量或度数是高度时,多项式特征变得太多。例如:
N(100,2)=5151
N(100,5)=96560646
因此,在这种情况下,您可能需要应用正则化来惩罚某些权重。该算法很可能会开始受到curse of dimensionality的影响(here也是一个非常好的讨论)。
PolynomialFeatures生成一个新矩阵,其中包含具有给定度数的所有多项式特征组合。
像[a]将被转换为[1,a,a ^ 2]的2级。
您可以将输入转换为PolynomialFeatures生成的矩阵。
from sklearn.preprocessing import PolynomialFeatures
a = np.array([1,2,3,4,5])
a = a[:,np.newaxis]
poly = PolynomialFeatures(degree=2)
a_poly = poly.fit_transform(a)
print(a_poly)
输出:
[[ 1. 1. 1.]
[ 1. 2. 4.]
[ 1. 3. 9.]
[ 1. 4. 16.]
[ 1. 5. 25.]]
你可以看到以[1,a,a ^ 2]的形式生成的矩阵
要观察散点图上的多项式特征,我们使用数字1-100。
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures
#Making 1-100 numbers
a = np.arange(1,100,1)
a = a[:,np.newaxis]
#Scaling data with 0 mean and 1 standard Deviation, so it can be observed easily
scaler = StandardScaler()
a = scaler.fit_transform(a)
#Applying PolynomialFeatures
poly = PolynomialFeatures(degree=2)
a_poly = poly.fit_transform(a)
#Flattening Polynomial feature matrix (Creating 1D array), so it can be plotted.
a_poly = a_poly.flatten()
#Creating array of size a_poly with number series. (For plotting)
xarr = np.arange(1,a_poly.size+1,1)
#Plotting
plt.scatter(xarr,a_poly)
plt.title("Degree 2 Polynomial")
plt.show()
输出:
改变度= 3,我们得到:
您有三维数据,以下代码生成2级的所有多边形特征:
X=np.array([[230.1,37.8,69.2]])
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures()
X_poly=poly.fit_transform(X)
X_poly
#array([[ 1.00000000e+00, 2.30100000e+02, 3.78000000e+01,
# 6.92000000e+01, 5.29460100e+04, 8.69778000e+03,
# 1.59229200e+04, 1.42884000e+03, 2.61576000e+03,
# 4.78864000e+03]])
这也可以使用以下代码生成:
a, b, c = 230.1, 37.8, 69.2 # 3-dimensional data
np.array([[1,a,b,c,a**2,a*b,c*a,b**2,b*c,c**2]]) # all possible degree-2 polynomial features
# array([[ 1.00000000e+00, 2.30100000e+02, 3.78000000e+01,
6.92000000e+01, 5.29460100e+04, 8.69778000e+03,
1.59229200e+04, 1.42884000e+03, 2.61576000e+03,
4.78864000e+03]])
以上是关于用sklearn的PolynomialFeatures无法理解的主要内容,如果未能解决你的问题,请参考以下文章
用python+sklearn(机器学习)实现天气预报数据 数据