Sklearnの多項式機能で助けが必要です。 1つの機能で十分に機能しますが、複数の機能を追加するたびに、度の累乗値以外の値も配列に出力します。例:この配列の場合、
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
を使用して簡単な方法で、新しい機能を作成できます。良いリファレンスがあります ここ 。もちろん、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
_
したがって、この場合、正則化を適用して、いくつかの重みにペナルティを課す必要があります。アルゴリズムが 次元の呪い に苦しみ始める可能性は十分にあります( here も非常に良い議論です)。
PolynomialFeaturesは、与えられた次数を持つ特徴のすべての多項式の組み合わせで新しい行列を生成します。
[a]は次数2の[1、a、a ^ 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に変更すると、次のようになります。
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]])