Machine-learning-with-python-preparing-data
機械学習-データの準備
前書き
機械学習アルゴリズムは、モデルトレーニングを可能にする最も重要な側面であるため、データに完全に依存しています。 一方、MLアルゴリズムに渡す前にそのデータを理解できない場合、マシンは役に立たなくなります。 簡単に言えば、常に正しいデータを供給する必要があります。 マシンが解決したい問題に対して、正しいスケール、フォーマット、および意味のある機能を含むデータ。
これにより、データ準備がMLプロセスで最も重要なステップになります。 データ準備は、データセットをMLプロセスにより適切にする手順として定義できます。
データの前処理を行う理由
MLトレーニングの生データを選択した後、最も重要なタスクはデータの前処理です。 広い意味で、データの前処理は、選択したデータを操作可能な形式に変換するか、MLアルゴリズムにフィードします。 機械学習アルゴリズムの期待どおりになるように、常にデータを前処理する必要があります。
データの前処理技術
MLアルゴリズムのデータを生成するためにデータセットに適用できる次のデータ前処理手法があります-
スケーリング
ほとんどの場合、データセットはさまざまなスケールの属性で構成されていますが、そのようなデータをMLアルゴリズムに提供できないため、再スケーリングが必要です。 データの再スケーリングにより、属性のスケールが同じになります。 通常、属性は0〜1の範囲に再スケーリングされます。 勾配降下法やk-Nearest NeighborsなどのMLアルゴリズムには、スケーリングされたデータが必要です。 scikit-learn Pythonライブラリの_MinMaxScaler_クラスを使用して、データを再スケーリングできます。
例
この例では、以前に使用したPima Indians Diabetesデータセットのデータを再スケーリングします。 最初に、CSVデータが読み込まれ(前の章で行われたように)、_ MinMaxScaler_クラスの助けを借りて、0から1の範囲で再スケーリングされます。
次のスクリプトの最初の数行は、CSVデータの読み込み中に前の章で記述したものと同じです。
これで、_MinMaxScaler_クラスを使用して、0〜1の範囲でデータを再スケーリングできます。
また、選択に応じて出力用のデータを要約することもできます。 ここでは、精度を1に設定し、出力の最初の10行を表示しています。
出力
パンダからread_csvをsklearn.preprocessingからインポートimport Binarizer path = r’C:\ pima-indians-diabetes.csv 'names = [' preg '、' plas '、' pres '、' skin '、' test '、' mass '、' pedi '、' age '、' class '] dataframe = read_csv(path、names = names)array = dataframe.values
binarizer = Binarizer(threshold = 0.5).fit(array)Data_binarized = binarizer.transform(array)
印刷(「\ nバイナリデータ:\ n」、Data_binarized [0:5])
バイナリデータ:[[標準化
基本的にガウス分布でデータ属性を変換するために使用されるもう1つの便利なデータ前処理手法。 平均とSD(標準偏差)は、平均が0でSDが1の標準ガウス分布とは異なります。 この手法は、線形回帰、ロジスティック回帰などのMLアルゴリズムで役立ちます。これは、入力データセットにガウス分布を仮定し、再スケーリングされたデータでより良い結果を生成します。 scikit-learn Pythonライブラリの_StandardScaler_クラスを使用して、データを標準化できます(平均= 0およびSD = 1)。
例
この例では、以前に使用したPima Indians Diabetesデータセットのデータを再スケーリングします。 最初に、CSVデータがロードされ、次に_StandardScaler_クラスを使用して、平均= 0およびSD = 1のガウス分布に変換されます。
次のスクリプトの最初の数行は、CSVデータの読み込み中に前の章で書いたものと同じです。
これで、_StandardScaler_クラスを使用してデータを再スケーリングできます。
また、選択に応じて出力用のデータを要約することもできます。 ここでは、精度を2に設定し、出力の最初の5行を表示しています。
出力
sklearnインポート前処理からnpをnpとしてインポートする
input_labels = ['red'、 'black'、 'red'、 'green'、 'black'、 'yellow'、 'white']
encoder = preprocessing.LabelEncoder()encoder.fit(input_labels)
test_labels = ['green'、 'red'、 'black'] encoded_values = encoder.transform(test_labels)print( "\ nLabels ="、test_labels)print( "Encoded values ="、list(encoded_values))encoded_values = [3 、0,4,1] decode_list = encoder.inverse_transform(encoded_values)
print( "\ nEncoded values ="、encoded_values)print( "\ nDecoded labels ="、list(decoded_list))
ラベル= ['green'、 'red'、 'black']エンコードされた値= [1、2、0]エンコードされた値= [3、0、4、1]デコードされたラベル= ['white'、 'black'、 '黄色」、「緑」]