マガジンのカバー画像

古典機械学習を学ぶ

29
線形回帰、ロジスティック回帰、正則化、決定木、サポートベクトルマシン、クラスタリング、次元削減などの機械学習の仕組みを解説していく予定です。
運営しているクリエイター

記事一覧

scikit-learn機械学習㉘パイプラインと便利ツール

前回は、ニューラルネットワークを解説しました。これまで分類タスクを中心として、よく知られた教師あり学習のモデルを紹介してきました。 これらのモデルを使って実験をすると、scikit-learnのモデルはどれも似たようなインターフェースを持っているのがわかります。また、どのモデルを使っても同じような訓練から評価への流れがあります。 # 訓練データとテストデータの準備X_train, X_test, y_train, y_test = ....# モデルの準備model =

scikit-learn機械学習㉗ニューラルネットワーク

前回は、非線形データをSVMのカーネルトリックで分離する実験を行いました。 SVMには、線形カーネル、多項式カーネル、RBFカーネルなどがあり、それぞれ特性が異なるため、最適なカーネルを選ぶにはデータの特徴を深く理解する必要があります。 しかし、これはSVMに限らず、従来の機械学習モデル全般に言えることです。特徴量の設計やモデルの選択は多くの試行錯誤を伴い、複雑なデータに対しては手動での調整が非常に困難になります。 その一方で、ニューラルネットワークは自動的に特徴量を抽

scikit-learn機械学習㉖SVM実践編

前回までの4つの記事でSVMの理論的な側面を紹介しました。 マージンの最大化 ソフト・マージンの導入 カーネル・トリック 多クラス分類 今回は、これまで積み上げてきたSVMの理論を利用して、実際にscikit-learnを使ってコーディングをして、実験を行います。 このような非線形のデータをさまざまなカーネルで実験します。また、ハイパーパラメータの調節をランダム・サーチを使って行います。 最後は、いくつかの非線形データセットの生成方法を紹介します。

scikit-learn機械学習㉕SVM理論4:多クラス分類

前回は、カーネルを使ってハイパープレーンを決定する仕組みであるカーネル・トリックを紹介しました。 カーネル・トリックでは、入力データを高次元の特徴量へ明示的に変換することなく、非線形データの分類を効率良く行うことが可能です。 今回は、カーネル・トリックの数学的な側面について、もう少し深掘りします。 また、これまでクラスを2つに分類すること(二項分類)を想定して解説してきましたが、SVMはもちろんもっと多数のクラスを扱うことができます。 よって、SVMによる3つ以上のク

scikit-learn機械学習㉔SVM理論3:カーネル・トリック

前回までにマージンの最大化とソフト・マージンによるサポート・ベクトル分類器について紹介してきました。 ただし、これまでずっと線形分離が可能なケースを取り上げてきました。 例えば、下図は2次元データにおいてマージンの最大化による分割を行ったものです。この境界は直線となっています。 また、下図はソフト・マージンを導入したケースです。 マージンの中にデータポイントが入り込んでいますが、ある程度の線形分離が可能であればそれなりに良い分類予測が行えます。また、過学習を防ぐ効果も

scikit-learn機械学習㉓SVM理論2:ソフト・マージンの導入

前回は、マージンの最大化によるデータの分類について解説しました。 しかし、その手法の問題点としてハイパープレーンで完全に2分割できないケースに対応できないことも浮かび上がってきました。 そこで今回はソフト・マージンが登場します。その理論的な仕組みと、scikit-learnにおける実装のされ方や過学習への影響などを解説します。

scikit-learn機械学習㉒SVM理論1:マージンの最大化

前回は、scikit-learnのk-NN(KNeighborsClassifier)を使った分類の実験を行いました。今回から、数回の記事に分けてサポート・ベクトル・マシン(Support Vector Machine、SVM)による分類の理論を解説します。 今回は、マージンの最大化による分類について紹介します。また、サポート・ベクトルとは何かなど関連する概念について解説します。 そのために具体例としてデータを2つのクラスに分類することを考えます。 下図を見て下さい。

scikit-learn機械学習㉑k-NN実践編

前回は、ノンパラメトリック手法であるk近傍アルゴリズム(k近傍法、k-Nearest Neighbors、k-NN)の紹介をしました。特に、KDツリーの構造について解説しました。今回は、scikit-learn の KNeighborsClassifier を使った実験を行います。 以前に実験したGBC(勾配ブースティング)などと比較してどのような性能を発揮するでしょうか。また、層化サンプリングについても解説します。

scikit-learn機械学習⑳k近傍アルゴリズム

前回は、勾配ブースティングによる分類の実験を行いました。 これまでブースティング、バギング、ランダム・フォレスト、決定木などを扱ってきましたが、これらは全てノンパラメトリックな手法です。 ノンパラメトリックの意味は後で解説しますが、今回紹介するk近傍アルゴリズム(k近傍法、k-Nearest Neighbors、k-NN)もノンパラメトリックな手法になります。 k-近傍アルゴリズム(以下、k-NN)の基本的な仕組みは単純です。以下、分類を例として解説します。 下図を見

scikit-learn機械学習⑲GBC実践編

前回は、勾配ブースティングの理論的な側面を解説しました。今回は、scikit-learnのGradientBoostingClassifier(GBC)を使って実験を行います。 まずは、デフォルトのパラメータで学習・評価を行い、その後にランダム・サーチを使ってより性能を高められるかどうかを確認します。さらに、アダブーストとの比較も行います。 また、重要な特徴量をグラフ表示して考察を行います。テクニックとして、ラベルごとに特徴量の重要度を表示する方法を紹介します。

scikit-learn機械学習⑱勾配ブースティング

前回は、グリッド・サーチとランダム・サーチでアダブーストのハイパーパラメータのチューニングを行いました。 今回は、アダブーストと同じブースティングの一種である、勾配ブースティング(Gradient Boosting)を紹介します。 残差(予測誤差)を減らすために弱学習器を追加していくというのが基本的なアプローチです。この学習プロセスを解説します。 なお、勾配ブースティングにおける残差と勾配の関係を理解し、なぜ勾配ブースティングが機能するのかを解説します。

scikit-learn機械学習⑰ランダム・サーチ

前回は、アダブーストで簡単な実験を行いましたが、ハイパーパラメータのチューニングの必要性が課題となりました。よって、今回は、scikit-learnにあるハイパーパラメータのチューニングのためのツールを使います。 最も単純なのは、以前にも登場したグリッド・サーチ(Grid Search)と呼ばれる手法で、調節したい各ハイパーパラメータに対して試したい値のリストを準備し、その組み合わせをすべて順番に実行して一番良い性能を出すパラメータ値の組み合わせを決定します。 例えば、A

scikit-learn機械学習⑯アダブースト実践編

前回は、アダブーストの理論的な側面を紹介しました。今回は、scikit-learnを使って簡単な実験を行います。 今回使うデータセット digits は数字の画像データです。各数字は、8x8ピクセルの画像で、ラベルは0から9までの10個のクラスになります。 以下は、digits からのサンプル画像です。 このような画像を scikit-learnの AdaBoostClassifier で分類します。 まず、いつものように探索的なデータ分析を行います。次に、データセッ

scikit-learn機械学習⑮アダブースト

前回は、ランダム・フォレストを使って実験しました。今回は、ブースティング(Boosting)の一種であるアダブーストを取り上げます。 振り返ってみると、ランダム・フォレストは、アンサンブル学習の一つであるバギングを改良したものでした。ただし、アンサンブル学習には他にも種類があります。特によく知られているのが、ブースティングです。バギングとブースティングはなんとなく似ているという印象を持つ方もいるかもしれませんが、今回の記事ではその違いを明確に解説します。 なお、バギングも