機械学習とは、結果を予測するためにデータセットを分析することです。PythonはMLに最適なプログラミング言語の1つと考えられています。この記事では、Pythonを使用した分類のための機械学習について説明します。
子供にリンゴとオレンジの区別を教えたいとします。いろいろな方法があります。両方の果物に触れさせて、形や柔らかさに慣れさせることができます。また、リンゴとオレンジの実例を複数見せて、視覚的に違いを見分けられるようにすることもできます。技術的には、このプロセスを機械学習と呼びます。
機械学習は、特定の問題を解決し、経験を通じてより良くなるようにコンピュータに教えます。ここで取り上げる例は分類問題で、機械には様々なラベル付きサンプルが与えられ、ラベル付きサンプルから得た知識を使ってラベルの付いていないサンプルにラベルを付けることが期待されます。機械学習問題は、既知のサンプルとその解に基づいて与えられた問題の解を予測することが期待される回帰の形式をとることもできます。と広く知られています。機械学習は、機械がラベル付けされていないデータのパターンを認識し、類似したパターンを持つサンプルのクラスタを形成することもできます。機械学習のもう一つの形態は、機械が間違いを犯すことによってその環境から学習することです。
分類
分類とは、既知の点から得られた情報に基づいて、与えられた点の集合のラベルを予測するプロセスです。データセットに関連付けられたカテゴリやラベルは、2値でも多変量でもかまいません。例えば、ある文章に関連する感情をラベル付けする必要がある場合、肯定的、否定的、または中立的とラベル付けすることができます。一方、ある果物がリンゴかオレンジかを予測しなければならない問題は、2値ラベルを持つことになります。表1は分類問題のサンプル・データセットです。
この表では、最後の列の値「Loan Approval」は、他の変数に基づいて予測されると予想されます。次のセクションでは、Pythonを使用して分類器を訓練し、評価する方法を学びます。
| 35 | 良い | はい | はい | はい | 
| 32 | 違い | はい | ||
| 22 | 一般 | |||
| 42 | 良い | はい | はい | 
分類器の訓練と評価
学習には、ラベル付けされた例を含むデータセットが必要です。この節ではデータのクリーニング処理については触れませんが、分類器にデータセットを投入する際には、データの前処理やクリーニングに関する様々なテクニックを読んでおくことをお勧めします。Python でデータセットを処理するために、pandas パッケージと構造体がインポートされます。そして、XG boost、ADA boostなどの様々な分類アルゴリズムから選択することができます。ここでは、複数の決定木を使用して形成される統合分類器であるランダムフォレスト分類器を取り上げます。
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
classifier = RandomForestClassifier()
#creating a train-test split with a proportion of 70:30
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33);
classifier.fit(X_train, y_train) # 学習セットで分類器を学習する
y_pred = classifier.predict(X_test) # 未知のデータで分類器を評価する
print("Accuracy: ", metrics.accuracy_score(y_test, y_pred)) # 精度をテスト計画の実際の値と比較する
この手順では性能指標として精度を使用していますが、テスト・セットが不均衡な場合、精度は代表的でない結果を出す傾向があるため、複数の指標を組み合わせて使用する必要があります。例えば、モデルがすべてのレコードに対して同じ予測を行い、モデルのテストに使用されるデータセットがアンバランス、つまりデータセット内のレコードのほとんどがモデルの予測と同じカテゴリにある場合、高い精度が得られます。
分類器の調整
チューニングとは、パフォーマンスを向上させるためにモデルの値を変更するプロセスです。ハイパーパラメータは、アルゴリズムの学習プロセスを改善するために値を変更できるパラメータです。
以下のコードでは、ランダムサーチ・ハイパーパラメータのチューニングについて説明します。ここでは、探索空間が定義され、そこからアルゴリズムがさまざまな値を選択し、最良の結果を生成するものを選択します:
from sklearn.model_selection import RandomizedSearchCV
#define the search space
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
grid = {min_samples_split : min_samples_split, min_samples_leaf : min_samples_leaf}
classifier = RandomizedSearchCV(classifier, grid, n_iter = 0x64);
# n_iter 探索空間から抽出されたサンプルの数を表す
# result.best_score と結果.best_params_ これは、モデルの最高のパフォーマンスとパラメータの最適値を得るために使用できる
classifier.fit(X_train, y_train)
投票分類器
また、複数の分類器とその予測を使ってモデルを作成し、個々の予測に基づいて予測を与えることもできます。このプロセスはハード・ボーティングとして知られています。ソフト・ボーティングは、各分類器が与えられたレコードが特定のカテゴリに属する確率を生成し、投票分類器が最大の確率を受け取ったカテゴリの予測を生成するプロセスです。
ソフト投票分類器を作成するためのコード・スニペットを以下に示します:
soft_voting_clf = VotingClassifier(
estimators=[(rf', rf_clf), ('ada', ada_clf), (xgb', xgb_clf), (et', et_clf), ('gb', gb_clf)],
voting=ソフト')
soft_voting_clf.fit(X_train, y_train)
を経由して





