全て

PySparkでDataFrameに行を追加する方法

PySparkのデータ処理一覧 今回はDataFrameに行を追加する方法を説明します。前回と同じPython とPysparkで比較して色んな例を作成します。 1)DataFrameを作成します。 Python import pandas as pd import numpy as  np pdf = pd.DataFrame(data={‘ColumnA’:np.linspace(1, 3, 3),                         ‘ColumnB’:[‘red’, ‘yellow’,’green’],                         ‘ColumnC’: np.array(1) }) pdf Pyspark data = [(1, ‘red’, 1), (2, ‘yellow’, 1), (3, ‘green’, 1)] sdf = sqlContext.createDataFrame(data, [“ColumnA”, “ColumnB”, “ColumnC”]) display(sdf) Out[1]:    ColumnA ColumnB  ColumnC 0      1.0     red        1 1      …

PySparkでDataFrameに行を追加する方法 Read More »

PySparkでDataFrameに列を追加する方法

PySparkのデータ処理一覧 大量データ処理するとき、高速でスケーラブルな汎用分散処理エンジンのSparkが、よく使われます。 PySparkはSparkを実行するためのPython APIです。今回は PySparkでDataFrameに列を追加する方法を説明します。PythonとPySparkで比較して色んな例を作成します。 1)DataFrame作成します。 Python import pandas as pd import numpy as np df = pd.DataFrame(data=np.array(range(5)), columns=[‘number’]) df       PySpark sdf = spark.range(5).toDF(“number”) display(sdf)   Out[1]:    number 0       0 1       1 2       2 3       3 4       4   2)DataFrameに値の列を追加します。 WithColumn関数を用いて新しく追加します。またlit関数を用いて、複数の値にしています。 new_column1 = 10 Python df[‘new_column1’] = 10 df     PySpark …

PySparkでDataFrameに列を追加する方法 Read More »

ランダムフォレストのアンサンブル【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は、上記の「ゼロ」を任意の重みに設定できます。さらに言うと、中間層の線形結合の「結合」に注目し、設定した割合に応じて、ランダムに「結合」を取り上げます。そして、結合に重みをかけて、活性化関数にかけます。   まとめ 今回は過学習対策を説明しました。過学習はデータサイエンティストの一般的な問題です。この記事で紹介したテクニックを使えば、過学習問題を克服して、良いモデルを作成することができるでしょう。

Azure ML Studioで顧客データ分析の実験(CRM analysis)

前回の記事は「Azure ML Studioでの機械学習の設定」を解説しました。 今回の記事はAzure ML Studioで顧客データ分析の実験を紹介します。 今回のデータセットはThe KDD Cup 2009 のデータです。 230特徴量の顧客属性とアップセル、新製品販売、解約の顧客行動履歴のフランスの通信会社Orangeデータです。50,000件のデータから3つの分類分析モデルを作成します。   解決課題 1)アップセルデータでアップセルしやすい人を見つけます。 2)新製品販売のデータで新製品を買う可能性高い人を見つけます。 3)解約データで解約したい人を見つけます   全体のExperimentの図は下記になります。特徴量の顧客属性と3つの過去行動のターゲットを結合して、モデルを作成します。   Var1からVar230は特徴量の5万件のデータセットです。 特徴データは欠損値がありますので、欠損値を0に置き換えます。   「Add Columns」 のモジュールで特徴量のと各ターゲットを結合します。 次に、vol1の層別化でテストとトレーニングを半分に分割します。   次に、予測モデルを構築するために、既定のパラメーターを持つ2クラスブーストデシジョンツリーバイナリ分類器を使用します。 ブースト デシジョン ツリーとは第2の木が第1の木の誤差を補正し、第3の木が第1および第2の木の誤差を補正するというように、集団学習法である。 ツリー全体の集合に基づいて予測あします。   Evaluate Model:アップセルタ テストセットに対するモデルのパフォーマンスは、Evaluate Modelモジュールの出力を視覚化することで確認できます。 「アップセルタ」では、ROC曲線は、モデルがランダムモデルよりも優れていること、および曲線下面積(AUC)が0.857であることを示しています。 しきい値が0.5の場合、精度は0.663、再現率は0.463、F1スコアは0.545です。   Evaluate Model:新製品販売 「新製品販売」のROC曲線では、AUCが0.727であることを示しています。   Evaluate Model:解約 「解約」のROC曲線では、AUCが0.711であります。     モデルの確認 [Train Model]のモジュールの Visualization 決定木図が表します。 モデルの判断を確認することができます。 決定木は、葉が分類を表し、枝がその分類に至るまでの特徴の集まりを表すような木構造を示します。データの持つ素性の中で集められたデータを一番よく分割する素性と閾値の組を選びます.その素性と閾値で分割後、またそれぞれのノードで分割を繰り返し行っていきます。分割が実行不可能となった場合、または、部分集合の個々の要素が各々1つずつの分類となってしまう段階で終了します。 …

Azure ML Studioで顧客データ分析の実験(CRM analysis) Read More »

グリッドサーチ(ハイパーパラメータ最適化)のまとめと例

(2019年7月27日の更新) 前回の記事は「モデル評価」を話しました。 今回の記事はグリッドサーチでのハイパーパラメータ最適化を解説します。 1)グリッドサーチ とは グリッドサーチとは、モデルの精度を向上させるために用いられる手法です。全てのパラメータの組み合わせを試してみる方法のことです。機械学習モデルのハイパーパラメータを自動的に最適化してくれるというありがたい機能。例えば、SVMならCや、kernelやgammaとか 2)GridSearchCV関数の説明 Pythonの機械学習ライブラリscikit-learnにはモデルのハイパーパラメータを調整する方法としてGridSearchCVが用意されています。 class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, iid=’warn’, refit=True, cv=’warn’, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’, return_train_score=False) パラメータ名 説明 estimator : estimator object チューニングを行うモデル param_grid : dict or list of dictionaries パラメタ候補値を「パラメタ名, 候補値リスト」の辞書で与える scoring : string, callable, list/tuple, dict or None, default: None 複数のメトリックを評価するには、文字例のリストか、の辞書で与える n_jobs : int or None, optional (default=None) 同時実行数(-1にするとコア数で同時実行) pre_dispatch …

グリッドサーチ(ハイパーパラメータ最適化)のまとめと例 Read More »