Python_sklearnライブラリチュートリアルとルーチン


Python_sklearnデータセット変換の前処理データ:
入力したデータを機械学習アルゴリズムで使用できるデータに変換します.フィーチャーの抽出と標準化が含まれます.
理由:データセットの標準化(平均0分散1の標準正規分布(Gauss分布)に従う)は、多くの機械学習アルゴリズムの一般的な要求である.
元のデータがGauss分布に従わないと,予測時にうまく表現できない可能性がある.実際には,標準化(z−score特性から平均/標準差を減算)を頻繁に行った.
1.1標準正規分布(平均値0、分散値1)Scale関数の使用による列のz-score
from sklearn import preprocessing  
import numpy as np  
#1、         
  
X = np.array([[ 1., -1.,  2.],  
             [ 2.,  0.,  0.],  
             [ 0.,  1., -1.]])  
X_scaled = preprocessing.scale(X)  
X_scaled  
""" 
        : 
array([[ 0.        , -1.22474487,  1.33630621], 
       [ 1.22474487,  0.        , -0.26726124], 
       [-1.22474487,  1.22474487, -1.06904497]]) 
"""  
X_scaled.mean(axis=0) #             。   0,        ,  (   1)       。  
""" 
         : 
array([ 0.,  0.,  0.]) 
"""  
X_scaled.std(axis=0)  
""" 
          : 
array([ 1.,  1.,  1.]) 
"""  

1.2前処理モジュールStandardScale
Transformer APIは、トレーニングセットの平均値と標準偏差を計算するために実装され、後で同じ変換をテストセットに再適用できるようにする.
#StandardScaler()     
""" 
StandardScaler()    with_mean    True         ,           ,with_mean= False         
with_std    True    True,           (      ) 
copy    True    False,        ,   inplace  。       NumPy   scipy.sparse CSR  ,         
"""  
scaler = preprocessing.StandardScaler().fit(X)   
scaler  
""" 
  : 
StandardScaler(copy=True, with_mean=True, with_std=True) 
"""  
#StandardScaler()     
scaler.mean_   
""" 
  X(   )     : 
array([ 1.        ,  0.        ,  0.33333333]) 
"""  
scaler.scale_  
""" 
  X(   )      (    ): 
array([ 0.81649658,  0.81649658,  1.24721913]) 
"""  
scaler.var_  
""" 
  X(   )     : 
array([ 0.66666667,  0.66666667,  1.55555556]) 
"""  
#StandardScaler()     
scaler.transform(X)   
""" 
  X(   )   (z-score): 
rray([[ 0.        , -1.22474487,  1.33630621], 
       [ 1.22474487,  0.        , -0.26726124], 
       [-1.22474487,  1.22474487, -1.06904497]]) 
"""  
#  StandardScaler().fit(X)                       
#  StandardScaler().fit_transform(X)    ,       
scaler.get_params() #           
""" 
  : 
{'copy': True, 'with_mean': True, 'with_std': True} 
"""  
scaler.inverse_transform(scaler.transform(X))#                  
""" 
  : 
array([[ 1., -1.,  2.], 
       [ 2.,  0.,  0.], 
       [ 0.,  1., -1.]]) 
"""  
#scaler.partial_fit(X)  X             std  
#scaler.set_params(with_mean=False)           

2、正規化フィーチャーを1つの範囲に拡大縮小(0,1)
スケーリングフィーチャーは、指定された最小値から最大値の間、通常は0~1の間です.または、各フィーチャーの最大絶対値を単位サイズにスケールします.これはMinMaxScalerまたはMaxAbsScaler関数を用いてそれぞれ実現できる.
""" 
#           [0-1] 
"""  
MinMaxScaler   feature_range=(0, 1)        , copy=True     
      :  
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))  
X_scaled = X_std * (max - min) + min  
""" 
 
X_train = np.array([[ 1., -1.,  2.], 
                   [ 2.,  0.,  0.], 
                   [ 0.,  1., -1.]]) 
min_max_scaler = preprocessing.MinMaxScaler() 
X_train_minmax = min_max_scaler.fit_transform(X_train) 
X_train_minmax 
"""  
     :  
array([[ 0.5       ,  0.        ,  1.        ],  
       [ 1.        ,  0.5       ,  0.33333333],  
       [ 0.        ,  1.        ,  0.        ]])  
""" 
#      
X_test = np.array([[ -3., -1.,  4.]]) 
X_test_minmax = min_max_scaler.transform(X_test) 
X_test_minmax 
"""  
     :  
array([[-1.5       ,  0.        ,  1.66666667]])  
""" 
"""  
MaxAbsScaler                ,   [-1,1]。                  ,     CSR CSC  。  
X_std = X/          
""" 
X_train = np.array([[ 1., -1.,  2.], 
                   [ 2.,  0.,  0.], 
                   [ 0.,  1., -1.]]) 
max_abs_scaler = preprocessing.MaxAbsScaler() 
X_train_maxabs = max_abs_scaler.fit_transform(X_train) 
X_train_maxabs 
"""  
     :  
array([[ 0.5, -1. ,  1. ],  
       [ 1. ,  0. ,  0. ],  
       [ 0. ,  1. , -0.5]])  
""" 
max_abs_scaler.scale_   
"""  
          :  
array([ 2.,  1.,  2.])  
""" 
 
X_test = np.array([[ -3., -1.,  4.]]) 
X_test_maxabs = max_abs_scaler.transform(X_test) 
X_test_maxabs  
"""  
     :  
array([[-1.5, -1. ,  2. ]])  
"""  

3、疎行列について
MaxAbsScalerとmaxabs_scaleは、疎データのスケールに特化して設計されています.scaleとStandardScaleはscipyを受け入れることができる.sparseマトリクスを入力としてwith_mean=Falseは構造関数に明示的に伝達すればよい.そうでない場合、サイレント・センターは疎性を破り、メモリの割り当てが意図的に行われないため、ValueErrorが放出されます.RobustScaleは疎入力には適用できませんが、疎入力には変換方法を使用できます.
スケーラは、圧縮された疎行および圧縮された疎列のフォーマットを受け入れます(scipy.sparse.csr_matrixおよびscipy.sparse.csc_matrixを参照).その他の疎入力は、圧縮疎行表現に変換されます.不要なメモリレプリケーションを回避するために、CSRまたはCSC表現を選択することを推奨します.最後に,中心データが十分に小さいと予想される場合,疎行列のtoarray法を用いて入力を明示的に配列に変換することは別の好ましい選択である.
4異常値を持つデータのスケーリング
データに多くの異常値が含まれている場合は、データの平均値と分散のスケールではうまく機能しない可能性があります.これらの場合、robust_を使用できます.代替としてscaleとRobustScaleを使用します.データの中心と範囲に対してより安定した推定を使用します.sklearnを使用できます.decomposition.PCAまたはsklearn.decomposition.RandomizedPCAとwhiten=Trueはさらに特徴間の線形相関を削除する.
5、正規化
正規化は、単一のサンプルをスケールして単位パラメータを持つプロセスです.このプロセスは、ポイント積や他のカーネルなどの二次形式を使用して、サンプルペアの類似性を量子化する場合に便利です.この仮定は,テキスト分類やクラスタリングコンテキストによく用いられる空間ベクトルモデルに基づいている.関数normalizeは、l 1またはl 2パラメータを使用して、単一の配列クラスデータセット上でこの操作を実行するための高速で簡単な方法を提供します.
X = [[ 1., -1.,  2.],  
    [ 2.,  0.,  0.],  
     [ 0.,  1., -1.]]  
X_normalized = preprocessing.normalize(X, norm='l2')  
X_normalized  
""" 
  l2   : 
array([[ 0.40824829, -0.40824829,  0.81649658], 
       [ 1.        ,  0.        ,  0.        ], 
       [ 0.        ,  0.70710678, -0.70710678]]) 
"""  

前処理モジュールはまた、Transformer APIを使用して同じ動作を実装する実用クラスNormalizerを提供している(fitメソッドはサンプルを独立して処理するため不要である).transform(X[,y,copy])は、Xのゼロ以外の行を単位パラメータにスケールします.個別に正規化されたサンプルは単位基準であり、少なくとも1つの非ゼロ成分を有する各サンプル(すなわち、データマトリクスの各行)は、他のサンプルとは独立して再スケーリングされ、そのノルム(l 1またはl 2)が1に等しくなる.
密集numpy配列とscipyを使用できる.Sparse行列(コピー/変換を避ける場合はCSR形式).たとえば、テキスト分類やクラスタリングの一般的な操作です.例えば、2つのl 2正規化TF−IDFベクトルの点積はベクトルのコサイン類似性であり、情報検索団体が一般的に使用するベクトル空間モデルの基本類似性メトリックである.
normalizer = preprocessing.Normalizer(norm='l1').fit(X)  # fit     
normalizer.transform(X)   
""" 
  : 
array([[ 0.25, -0.25,  0.5 ], 
       [ 1.  ,  0.  ,  0.  ], 
       [ 0.  ,  0.5 , -0.5 ]]) 
"""  

6、二値化
6.1特徴の二値化
フィーチャー二値化は、数値フィーチャーをしきい値化してブール値を得るプロセスです.これは,入力データが多変数バーヌリー分布に基づいて分布すると仮定した下流確率推定器に有用である可能性がある.例えば、これはsklearnです.neural_network.BernoulliRBMの場合.テキスト処理では、正規化されたカウント(単語周波数とも呼ばれる)やTF−IDF値の特徴が実際にはよりよく表現される場合でも、二値特徴(確率推論を簡略化する可能性がある)がよく用いられる.二元化と二元化はscipyから受ける.sparseの密集アレイ様と疎行列を入力とした.疎入力の場合、データは圧縮疎行表現に変換されます(scipy.sparse.csr_matrixを参照).不要なメモリコピーを回避するには、CSRを選択することをお勧めします.
X = [[ 1., -1.,  2.],  
      [ 2.,  0.,  0.],  
     [ 0.,  1., -1.]]  
  
binarizer = preprocessing.Binarizer().fit(X)  # fit does nothing  
binarizer  
""" 
  : 
Binarizer(copy=True, threshold=0.0) 
"""  
binarizer.transform(X)  
""" 
  : 
array([[ 1.,  0.,  1.], 
       [ 1.,  0.,  0.], 
       [ 0.,  1.,  0.]]) 
"""  
#             
binarizer = preprocessing.Binarizer(threshold=1.1)  
binarizer.transform(X)  
""" 
  : 
array([[ 0.,  0.,  1.], 
       [ 1.,  0.,  0.], 
       [ 0.,  0.,  0.]]) 
"""  

7、分類特徴符号化
一般に、フィーチャーは連続した値ではなく、分類によって与えられる.たとえば、1人は次のような特徴を持つことができます.
       ["male", "female"]
       ["from Europe", "from US", "from Asia"]
       ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]
このような特徴は、効率的に統合され、符号化され得る.
["male","from US","uses Internet Explorer"]は[0,1,3]で表すことができます
[[female],[from Asia],[uses Chrome]]は[1,2,1]で表すことができる
しかし,このような表現はSklearnでは推定できないが,離散(分類)特徴は,特徴値を数値に変換する際に不連続であることが多いためである.OneHotEncoder関数はone‐of‐K(kの1つ)とone‐hot(ユニヒート)符号化によりこの問題を解決した.
enc = preprocessing.OneHotEncoder()  
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])   
""" 
  : 
OneHotEncoder(categorical_features='all', dtype=, 
       handle_unknown='error', n_values='auto', sparse=True) 
"""  
enc.transform([[0, 1, 3]]).toarray()  
""" 
  : 
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.]]) 
"""  
  
""" 
         ,                   。      n_values      。 
                 ,               。         ,      。 
  :         ,                   。 
"""  
#  ,                    ,        n_value。  ,  
enc = preprocessing.OneHotEncoder(n_values=[2, 3, 4])  
#   , 2   3                 ( 0,1)  
enc.fit([[1, 2, 3], [0, 2, 0]])  
""" 
  : 
OneHotEncoder(categorical_features='all', dtype=, 
       handle_unknown='error', n_values=[2, 3, 4], sparse=True) 
"""  
enc.transform([[1, 0, 0]]).toarray()  
""" 
  : 
array([[ 0.,  1.,  1.,  0.,  0.,  1.,  0.,  0.,  0.]]) 
"""  

8欠落した値の補間
様々な理由により、多くの現実世界データセットは欠落した値を含み、通常は空白、NaNまたは他のプレースホルダとして符号化される.しかしながら、このようなデータセットはscikit−learn推定器と互換性がなく、scikit−learn推定器は配列中のすべての値が数値であり、意味を有し、維持していると仮定する.不完全なデータセットを使用する基本的なポリシーは、欠落した値を含む行または列全体を破棄することです.しかしながら、これは、不完全であっても価値のあるデータを失うことを代価とする.より良いポリシーは、欠落した値を補間することです.すなわち、データの既知の部分から推定します.Imputerクラスでは、欠落した値が存在する行または列の平均値、中央値または最も一般的な値を使用する欠落した値を入力するための基本的なポリシーが提供されます.このクラスはまた、異なる欠落値符号化を可能にする.
#                   ( 0)         np.nan    :  
import numpy as np  
from sklearn.preprocessing import Imputer  
imp = Imputer(missing_values='NaN', strategy='mean', axis=0) # missing_values:integer/“NaN”, strategy:mean/median/most_frequent  
imp.fit([[1, 2], [np.nan, 3], [7, 6]])  
""" 
  : 
Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0) 
"""  
X = [[np.nan, 2], [6, np.nan], [7, 6]]  
imp.transform(X)  
""" 
  : 
array([[ 4.        ,  2.        ], 
       [ 6.        ,  3.66666667], 
       [ 7.        ,  6.        ]]) 
"""  
#Imputer        :  
import scipy.sparse as sp  
X = sp.csc_matrix([[1, 2], [0, 3], [7, 6]])  
imp = Imputer(missing_values=0, strategy='mean', axis=0)  
imp.fit(X)  
""" 
Imputer(axis=0, copy=True, missing_values=0, strategy='mean', verbose=0) 
"""  
X_test = sp.csc_matrix([[0, 2], [6, 0], [7, 6]])  
imp.transform(X_test)  
""" 
  : 
array([[ 4.        ,  2.        ], 
       [ 6.        ,  3.66666667], 
       [ 7.        ,  6.        ]]) 
"""  

9多項式フィーチャーの生成
一般に,入力データの非線形特性を考慮することによってモデルの複雑さを増大させることが有用である.使用する簡単で一般的な方法は、特徴の高次およびインタラクティブ項を得ることができる多項式特徴である.PolynomialFeaturesで実装されています.多項式コア関数を使用する場合、多項式特徴は、カーネル法(例えば、sklearn.svm.SVC、sklearn.decomposition.KernelPCA)において暗黙的に使用されることに留意されたい.
from sklearn.preprocessing import PolynomialFeatures  
X = np.arange(6).reshape(3, 2)  
X  
""" 
  : 
array([[0, 1], 
       [2, 3], 
       [4, 5]]) 
"""  
poly = PolynomialFeatures(2)  
poly.fit_transform(X)          
""" 
  : 
array([[  1.,   0.,   1.,   0.,   0.,   1.], 
       [  1.,   2.,   3.,   4.,   6.,   9.], 
       [  1.,   4.,   5.,  16.,  20.,  25.]]) 
        
 X(X_1, X_2)  X(1, X_1, X_2, X_1^2, X_1X_2, X_2^2). 
"""  
  
#      ,           ,            
X = np.arange(9).reshape(3, 3)  
X     
""" 
  : 
array([[0, 1, 2], 
       [3, 4, 5], 
       [6, 7, 8]]) 
"""  
poly = PolynomialFeatures(degree=3, interaction_only=True)  
poly.fit_transform(X)   
""" 
  : 
array([[   1.,    0.,    1.,    2.,    0.,    0.,    2.,    0.], 
       [   1.,    3.,    4.,    5.,   12.,   15.,   20.,   60.], 
       [   1.,    6.,    7.,    8.,   42.,   48.,   56.,  336.]]) 
        
 (X_1, X_2, X_3)   (1, X_1, X_2, X_3, X_1X_2, X_1X_3, X_2X_3, X_1X_2X_3). 
"""  

10カスタム変換器
from sklearn.preprocessing import FunctionTransformer  
transformer = FunctionTransformer(np.log1p)  
X = np.array([[0, 1], [2, 3]])  
transformer.transform(X)  
""" 
  : 
array([[ 0.        ,  0.69314718], 
       [ 1.09861229,  1.38629436]]) 
"""