ScikitLearn-拡張線形モデリング

この章では、Sklearnの多項式機能とパイプラインツールに焦点を当てます。

多項式特徴の紹介

データの非線形関数でトレーニングされた線形モデルは、通常、線形メソッドの高速パフォーマンスを維持します。また、はるかに広い範囲のデータに適合させることもできます。これが、機械学習で非線形関数でトレーニングされた線形モデルが使用される理由です。

そのような例の1つは、係数から多項式の特徴を構築することにより、単純な線形回帰を拡張できることです。

数学的には、標準の線形回帰モデルがあるとすると、2次元データの場合は次のようになります。

$$ Y = W_ {0} + W_ {1} X_ {1} + W_ {2} X_ {2} $$

これで、2次多項式の特徴を組み合わせることができ、モデルは次のようになります。

$$ Y = W_ {0} + W_ {1} X_ {1} + W_ {2} X_ {2} + W_ {3} X_ {1} X_ {2} + W_ {4} X_1 ^ 2 + W_ { 5} X_2 ^ 2 $$

上記はまだ線形モデルです。ここで、結果の多項式回帰は同じクラスの線形モデルにあり、同様に解くことができることがわかりました。

そのために、scikit-learnはという名前のモジュールを提供します PolynomialFeatures。このモジュールは、入力データ行列を指定された次数の新しいデータ行列に変換します。

パラメーター

次の表は、によって使用されるパラメータで構成されています PolynomialFeatures モジュール

シニア番号 パラメータと説明
1

degree −整数、デフォルト= 2

これは、多項式の特徴の次数を表します。

2

interaction_only −ブール値、デフォルト= false

デフォルトではfalseですが、trueに設定すると、ほとんどの場合、異なる入力フィーチャの製品であるフィーチャが生成されます。このような機能は、インタラクション機能と呼ばれます。

3

include_bias −ブール値、デフォルト= true

これには、バイアス列、つまりすべての多項式の累乗がゼロである機能が含まれています。

4

order − str in {'C'、 'F'}、デフォルト= 'C'

このパラメーターは、密な場合の出力配列の順序を表します。「F」次数は計算が速いことを意味しますが、一方で、後続の推定量が遅くなる可能性があります。

属性

次の表は、によって使用される属性で構成されています PolynomialFeatures モジュール

シニア番号 属性と説明
1

powers_ −配列、形状(n_output_features、n_input_features)

これは、powers_ [i、j]がi番目の出力のj番目の入力の指数であることを示しています。

2

n_input_features _ − int

名前が示すように、入力特徴の総数を示します。

3

n_output_features _ − int

名前が示すように、それは多項式出力特徴の総数を与えます。

実装例

次のPythonスクリプトは PolynomialFeatures 8の配列を形状(4,2)に変換するトランスフォーマー-

from sklearn.preprocessing import PolynomialFeatures
import numpy as np
Y = np.arange(8).reshape(4, 2)
poly = PolynomialFeatures(degree=2)
poly.fit_transform(Y)

出力

array(
   [
      [ 1., 0., 1., 0., 0., 1.],
      [ 1., 2., 3., 4., 6., 9.],
      [ 1., 4., 5., 16., 20., 25.],
      [ 1., 6., 7., 36., 42., 49.]
   ]
)

パイプラインツールを使用した合理化

上記の種類の前処理、つまり入力データ行列を特定の次数の新しいデータ行列に変換することは、 Pipeline 基本的に複数の推定量を1つにチェーンするために使用されるツール。

Scikit-learnのパイプラインツールを使用して前処理を合理化する以下のPythonスクリプト(3次多項式データに適合します)。

#First, import the necessary packages.
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
import numpy as np

#Next, create an object of Pipeline tool
Stream_model = Pipeline([('poly', PolynomialFeatures(degree=3)), ('linear', LinearRegression(fit_intercept=False))])

#Provide the size of array and order of polynomial data to fit the model.
x = np.arange(5)
y = 3 - 2 * x + x ** 2 - x ** 3
Stream_model = model.fit(x[:, np.newaxis], y)

#Calculate the input polynomial coefficients.
Stream_model.named_steps['linear'].coef_

出力

array([ 3., -2., 1., -1.])

上記の出力は、多項式特徴でトレーニングされた線形モデルが正確な入力多項式係数を復元できることを示しています。