機械学習

ダミー変数に変換 【One-Hotエンコーディング】

今回の記事はカテゴリ変数をダミー変数に変換を解説します。 ダミー変数とは、 カテゴリ変数を数字に変換する手法のことです。具体的には、数字ではないデータを「0」と「1」だけの数列に変換します。機械学習は数字などの量的データによって行うものですが、それ以外の事柄でも数字に変換し、分析に取り入れることができます。多クラスの特徴量をone-hot表現に変換したりすることです。 ダミー変数の作り方 二者択一のダミー変数を作成する場合は、どちらか一方を「0」、もう片方を「1」と変換してデータを作ります。 例えば 「はい→1、いいえ→0」、 「男→1、女→0」、 「あり→1、なし→0」   複数から選択するダミー変数を作成する場合は、含まれる要素の数に応じたダミー変数を作ることでデータに転換可能です。例えば、 国「日本、 中国、アメリカ」 日本ダミー : 日本を1、その他を0とした数列 中国ダミー : 中国を1、その他を0とした数列 アメリカダミー : アメリカを1、その他を0とした数列   だは、pandasのget_dummiesでダミー変数を変更しましょう。 pandas.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)   data – ダミー変数を作成したいデータ prefix – DataFrameのカラムラベルに付け加える文字列 prefix_sep – prefixで指定された文字列を付け加える際に橋渡しとなる文字列 dummy_na – 欠損値もダミー変数の処理 columns – ダミー変数に変換したい列データ sparse – SparseDataFrameとして返り値 drop_first – カテゴリー数がk個あった時、k-1個のダミー変数を作成するかどうか dtype – 新たなカラムのデータ型   # サンプルデータ作成 …

ダミー変数に変換 【One-Hotエンコーディング】 Read More »

Group Lassoの正則化

前回、【正則化のLasso回帰とRidge回帰】について説明しました。 今回の記事はLasso進化形のGroup Lassoの正則化について解説します。   Group Lassoとは Group Lassoは、説明変数の属性に基づいていくつかのグループに分けられるとき、変数選択においてグループ単位で選択したいときに利用する方法です。 Lassoというのは、正則化項にL1normを使ったいわゆるL1正則化のことで、大部分の重みが0に潰れて疎な解が得られます。   この進化形として、Group Lassoという手法があります。Group Lassoでは、重みベクトルの次元をグループ分けして、各グループごとのL2normを正則化項として使います。 使うメリットは以下になります。 カテゴリー変数の効果をモデルに反映 例えば、都道府県を説明変数に入れる場合があります。この場合は、各都道府県をフラグ化して、変数にします。しかしこの方法では「都道府県じたい」が効果のある変数かどうかを判定したい場合にはわかりません。そのためカテゴリー変数じたいの効果の有無を調べる場合にGroup Lassoを使うとわかります。   大規模な線形分類、回帰のライブラのsklearn-contrib-lightningをインストールします。 pip install scikit-learnpip install sklearn-contrib-lightning   ライブラリのインポート from sklearn.datasets import fetch_20newsgroups_vectorizedfrom lightning.classification import CDClassifier   20 newsgroupsはこのブログでも過去何回か取り上げまたしが、ベクトル化済みのデータです。 (130,107のカラム) bunch = fetch_20newsgroups_vectorized(subset=”all”)X = bunch.datay = bunch.targetprint(X.shape)print(y.shape) (18846, 130107)(18846,)   分類の設定と学習 clf = CDClassifier(penalty=”l1/l2″,                   loss=”squared_hinge”,                   multiclass=True,                   max_iter=20,                   alpha=1e-4,                   …

Group Lassoの正則化 Read More »

X-means法でクラスタ数を推定する方法

  前回、【クラスタ数の決め方の1つシルエット分析】について説明しました。 今回の記事はもう一つのクラスタ数を自動推定するX-meansについて紹介します。 x-meansとは x-meansは、k-meansのクラスター数kを自動推定しつつクラスタリングしてくれる手法です。k-meansの逐次繰り返しとBIC(Bayesian information criterion)による分割停止基準を用いて最適なクラスター数を決定します。 BICは重心の近くにガウス分布している仮定してBICを計算します。   詳細はx-meansの論文になります。 今回は「pyclustering」のライブラリを使用して、x-meansのクラスタ数推定を行います。 先ず、ライブラリの読み込み %matplotlib inline import pyclustering from pyclustering.cluster import xmeans import numpy as np import matplotlib import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import make_blobs   サンプルの作成 X, y = make_blobs(n_samples=5000,                   n_features=2,                   centers=4,                   cluster_std=1,                   center_box=(-10.0, 10.0),                   shuffle=True, …

X-means法でクラスタ数を推定する方法 Read More »

RMSLE を用いた評価指標

前回の記事は【ROC曲線とAUC】機械学習の評価指標を説明しました。今回は連続値回帰モデルの評価指標のRMSLEを紹介したいと思います。 先ず、RMSEを説明します。 RMSE (Root Mean Squared Error) 定義式   (n = 件数 、y = 実測の値、ŷ =予測の値) RMSEとか平均平方二乗誤差といいます。すべての誤差の平方根の平均です。 連続値の値でどれぐらい離れているかを平均を取り、平方根で評価します。   コード: from sklearn.metrics import mean_squared_error import numpy as np y_true = [100, 110, 120, 130] y_pred = [110, 120, 130, 140] RMSE=np.sqrt(mean_squared_error(y_true, y_pred)) print(RMSE) 10   RMSLE (Root Mean Squared Logarithmic Error) 定義式   (n = …

RMSLE を用いた評価指標 Read More »

OpenCV + Pythonでの色認識・色検出

前回の記事は OpenCVで画像の図形検出と直線検出について説明しました。 「OpenCV + Pythonでの図形検出、図形数える」 「OpenCV + Pythonでの直線検出」 今回の記事は画像解析についてOpenCVで画像から色認識し、色検出を説明します。 OpenCVライブラリのInRangeはビデオ、画像の色範囲を認識する機能です。下界と上界を設定すれば、対象の色を検出ができます。InRangeのクラスは下記に説明します。 InRange InRange(src, lower, upper, dst) パラメタ: src (CvArr) – 入力画像 lower (CvArr) – 下界(その値を含む)を表す配列 upper (CvArr) – 上界(その値は含まない)を表す配列 dst (CvArr) – 出力画像 (引数経由で受け取る場合) この関数は,入力配列の要素毎に範囲チェックを行います。

ランダムフォレストのアンサンブル【Random Forest Ensemble】

前回の記事 「ランダムフォレスト(分類分析)」はランダムフォレストの特徴とランダムフォレストの例について話しました。ランダムフォレストは分類や回帰に使える機械学習の手法です。今回は別のランダムフォレストアンサンブルのクラスター分析の一つを説明します。 先ずアンサンブルはなんのことでしょう? アンサンブル手法 (Ensemble methods) 同じ学習アルゴリズムの多数のEstimatorからの予測結果を組み合わせた技術。この方法は、一つのEstimatorと比較して一般化可能性/ロバスト性を向上させます。 ランダムフォレストアンサンブル (Random Forest Ensemble) 教師なしデータセットの高次元スパース表現への変換の手法。データポイントは、各ツリーのどのリーフに分類されるかによってコード化されます。 葉のワンホットエンコーディングを使用して、これは森の中に木があるのと同じくらい多くのものとのバイナリコーディングをもたらします。 次元削減法を適用した高次元表現を学びます。 ただし、データセットをクラスが線形分離可能な表現にキャストすると便利なことがよくあります。

Azure ML Studioでの Permutation Feature Importance 特徴の重要度

前回の記事は「Azure ML Studioで顧客データ分析」を説明しました。今回はPermutation Feature Importance を使ってモデルの変数の重要度を判断する機能を説明します。 機械学習モデルを作成するとき、機械学習の開発者、意思決定者、およびモデルによって影響を受ける担当者は、機械学習モデルがどのように決定を行うか、またそのパフォーマンスにどの特徴が関係するかを理解する必要があります。Permutation Feature Importance (PFI) はモデルについて説明するツールであり、機械学習開発者がモデルの変数の重要性をよく理解できるようにします。   Permutation Feature Importanceとは Breiman 著「Random Forests」論文から機械学習モデルのグローバルな特徴の重要性を判断する技術です。特徴量がランダムな値に設定されたら、どのような影響がモデルに及ぼされるかを判明する方法になります。   メリット モデルに依存しない点です。評価することができるすべてのモデルに使用できます。 特徴の重要性を計算するために、トレーニング セットだけでなく任意のデータセットを使用できます。    Permutation Feature Importanceの使い方 Feature Selection > Permutation Feature Importanceを選択します。trained model と左のインプットと接続し、右のインプットはテストデータと接続します。   Permutation Feature Importanceの設定   Random seed このシードを同じ数値にすることで、毎回同じ擬似乱数が生成されます。   Metric for measuring performance このドロップボックスから、一つのメトリックを選択することができます。 Classification Accuracy, Precision, Recall, Average Log Loss Regression Precision, …

Azure ML Studioでの Permutation Feature Importance 特徴の重要度 Read More »

過学習の対策

今回は前回の記事の続きの過学習Overfittingの対策」を紹介します。過学習と未学習の説明はこちらです。 訓練誤差とテスト誤差の理論 学習が進むほど訓練誤差が低下していきます。つまりテストデータに対する予測精度は向上するが、テストのデータセットに入っていないデータに対する予測精度が下がり、テスト誤差が上がってしまうものです。いわゆる過学習(Over Fitting)という状態になっていきます。   過学習は訓練データとテストデータの影響があります。訓練データが少ないほど、訓練誤差は小さく、汎化誤差は大きくなります。訓練データが十分に多いと、訓練誤差も汎化誤差も、ノイズの強さで頭打ちになります。   過学習の対策Overfitting prevention 1)データセットを増やす トレーニングデータが多ければ多いほど、それが過剰適合する可能性がより低いになります。 最初の過学習対策、過学習に対して最も効果がある対処法は訓練データを増やすことです   2)Data augmentation & Noiseの加工   データセットを増やすことは面倒と手間のことです。またデータセットを増やすことができない場合もあります。その場合は Data augmentation と Noiseのデータ加工の方法が役に立ちます。学習用のデータに対し人工的なノイズなどを付加した画像を生成し,生成した画像を元の学習用データに追加することで性能の向上が期待される技術になります。   前回の記事の「Data Augmentationの解説」はこちらです。   3)単純なモデルへ変化する 複雑すぎるモデルは過学習の原因の事があります。モデルはあまりにも強力であるかもしれません。 そのモデルの複雑さを軽減することができます。推定量の数を減らしたり、モデルのパラメーターを変更したりするには、モデルを単純にしても当てはまりませんが、データから学習するには複雑にすることができます。 これには、モデルをより軽量にし、より速く訓練し、そしてより速く走らせるという利点もあります。   4)早期停止 早期停はニューラル ネットワークの過学習対策です。早期停止とは、基本的に、テストデータの損失が増加し始めたら(つまり検証精度が低下し始めたら)、トレーニングを停止することです。監視する値、監視する値について改善として判定される最小変化値、訓練が停止し,値が改善しなくなってからのエポック数のパラメーターを設定することができます。   5)L1 と L2 正則化 機械学習では、過学習を防ぐ方法として正則化が行われることが多いです。過学習を避けるためには、学習モデルの選択、特徴量・次元の選定およびそれらに対応した学習データの数を注意深く考慮して設定していく必要があります。正則化とは、複雑さが増すことに対するペナルティを設け、このペナルティを訓練誤差に加えた量が最も小さくなる学習モデルを求めるようにすることにより汎化性能を高めようとするものです。一般的に使用されるのは、L1正則化とL2正則化です。 L1正則化 特定のデータの重みを0にする事で、不要なデータを削除します。 L2正則化 データの大きさに応じて0に近づけて、滑らかなモデルです。   正則化の例はこちらです。   6)DropoutとDropConnect ニューラルネットワークにおける過学習対策になりますが、DropoutとDropConnectです。 Dropoutは、設定した割合に応じて、ランダムにユニットを選択し、そのユニットの重みを「ゼロ」にします。 DropConnectは、上記の「ゼロ」を任意の重みに設定できます。さらに言うと、中間層の線形結合の「結合」に注目し、設定した割合に応じて、ランダムに「結合」を取り上げます。そして、結合に重みをかけて、活性化関数にかけます。   まとめ 今回は過学習対策を説明しました。過学習はデータサイエンティストの一般的な問題です。この記事で紹介したテクニックを使えば、過学習問題を克服して、良いモデルを作成することができるでしょう。