この記事は、インテルの The Parallel Universe Magazine 28 号に収録されている、インテル® DAAL を利用して Kaggle の問題を解く方法を紹介した章を抜粋翻訳したものです。
マシンラーニングは、統計、データマイニング、人工知能 (AI) 分野において重要な役割を果たし、その役割は拡大しつつあります。データの急激な増加に伴い、データの学習はさらに進むと考えられ、またそれはビジネスの成長に不可欠です。特定の問題を解くためには、次のようなさまざまな要因を考慮して、適切なアルゴリズムとライブラリーを選択します。
- 問題のクラス (例: 分類、回帰)
- 入力データ
- パフォーマンス要件
- 予測の正解率
- モデルの解釈可能性
この選択にはさまざまなスキルが必要になるため、マシンラーニング普及の妨げとなっています。
この記事では、2 つの実際のマシンラーニングの問題をベースに、適切なアルゴリズムの選択に使用できる条件について述べます。ここで使用する問題の 1 つは、有名な Kaggle (英語) プラットフォームで予測モデリングに使用されている問題で、もう 1 つは、データマイナーが最良のモデルの生成を競う同サイトの解析コンペティションからの問題です。アルゴリズムの実装には、以下のライブラリーを使用します。
- scikit-learn: Python* データ・サイエンティストの間で最もよく使用されているライブラリー
- R: データ解析と統計計算の言語
- インテル® データ・アナリティクス・アクセラレーション・ライブラリー (インテル® DAAL): インテル® プラットフォーム上でのデータ解析とマシンラーニング向けに最適化されたビルディング・ブロックを提供するパフォーマンス・ライブラリー
実際のマシンラーニングでは、CPU とメモリーの要件が高いことが多いため、インテル® Xeon Phi ™ プロセッサーは理想的なプラットフォームと言えます。インテル® DAAL は、インテル® Xeon® プロセッサーおよびインテル® Xeon Phi ™ プロセッサー向けに最適化されたマシンラーニング・アプリケーションを素早く開発できるように支援します。ここでは、Kaggle: リーフ分類 (英語) とタイタニック: 大惨事からのマシンラーニング (英語) の 2 つの実際の問題でインテル® DAAL を利用して KNN (K 近傍法)、ブースティング、サポート・ベクトル・マシン (SVM) を実装し、scikit-learn および R の同じアルゴリズムと結果を比較します。
Kaggle を使用する理由
Kaggle は、企業や研究者が投稿したデータに対し、世界中の統計学者とデータマイナーが最良のモデルの生成を競う、予測モデリングと解析コンペティションのプラットフォームです。1 2016 年 5 月時点では、194 カ国に 536,000 の登録ユーザー (Kagglers と呼ばれる) が存在する、世界で最も大きく、多様なコミュニティーの 1 つです。Kaggle は、これまでに 200 を超えるデータ・サイエンス・コンペティションの実績があります。
各コンペティションの目標は、特定の実際の問題に対して最良のモデルを生成することです。モデルは、通常、テスト・データ・セットに対する予測の正解率で評価されます。参加者は、テスト・データ・セットで予測を実行して、モデルを瞬時に評価し、ランキングで結果を確認できます。
この記事では、異なるアルゴリズムとライブラリーにより生成されたモデルを評価し、Kaggle コンペティションでどのような結果が得られるか見てみます。
リーフ分類 (Leaf Classification)
世界には数十万種類の植物が存在します。これらの分類は、歴史的に問題が起こりやすく、重複して識別されることがしばしばありました。この Kaggle チャレンジでは、葉のイメージと抽出された特徴 (例えば、形状、マージン、テクスチャー) を基に 99 種類の植物を正確に識別するため、分類器を訓練します。訓練データには 990 の葉のイメージがあり、テストデータには 594 のイメージが含まれています (図 1)。イメージごとに次の 3 つの特徴も提供されます: 形状隣接記述子、内部テクスチャー・ヒストグラム、ファインスケール・マージン・ヒストグラム (図 2)。各特徴は、葉のサンプルごとにそれぞれ 64 の属性ベクトルで表されます。
図 1. 葉のイメージ
図 2. 特徴の概要
1 つのアプローチとして、マシンラーニング・アルゴリズムのリストを訓練データに適用して、検証データでその正解率を評価し、最適なアルゴリズムとハイパーパラメーターを見つけます。scikit-learn は、Python* データ・サイエンティストの間で最もよく使用されているライブラリーで、広範なアルゴリズムを提供します。Kaggle カーネル (https://www.kaggle.com/jeffd23/leaf-classification/10-classifier-showdown-in-scikit-learn?utm_campaign=cmd_13241-1&utm_source=pum28&utm_medium=pdf&utm_content=kremnyov_kagglekernelleaf_link5) では、10 のアルゴリズムの予測の正解率を解析しました。その結果、線形判別式解析と KNN アルゴリズムで検証データに対して最良の結果が得られました (詳細は Kaggle カーネルのページを参照してください)。
線形判別式解析の Python* (scikit-learn) 実装:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis clf = LinearDiscriminantAnalysis() clf.fit(X_train, y_train) test_predictions = favorite_clf.predict(X_test)