スペクトラルクラスタリングのパラメータ解説

  以前の記事はスペクトラルクラスタリングについて説明しました。スペクトラルクラスタリングとは、クラスタリングの機械学習の方法のうち、教師なし学習に分類されます。スペクトラルクラスタリングの詳細はこちらです。   今回の記事はスペクトラルクラスタリングのパラメータ設定を説明します。 Scikit-learnのライブラリのパラメータを説明していきます。   class sklearn.cluster.SpectralClustering(n_clusters=8, eigen_solver=None, random_state=None, n_init=10, gamma=1.0, affinity=’rbf’, n_neighbors=10, eigen_tol=0.0, assign_labels=’kmeans’, degree=3, coef0=1, kernel_params=None, n_jobs=None)   先ず、スペクトラルクラスタリングの例を作成します。   from sklearn import datasets   # データ作成 X,z = datasets.make_blobs(n_samples=5000,                           n_features=2,                           centers=15,                           cluster_std=1.2,                           center_box=(-10.0, 10.0),                           shuffle=True,                           random_state=111                           )   # データの整形 sc=preprocessing.StandardScaler() sc.fit(X) X_norm=sc.transform(X)   …

スペクトラルクラスタリングのパラメータ解説 Read More »

決定木分析のパラメータ解説

前回の記事は決定木の特徴とアルゴリズムを説明しました。今回の記事は決定木のパラメータ設定を説明します。決定木の紹介はこちらです。 Scikit-learnのライブラリのパラメータを説明していきます。 class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)[source]   from sklearn.datasets import load_iris from sklearn import tree   clf = tree.DecisionTreeClassifier(criterion=’gini’,                                   splitter=’best’,                                   max_depth=4,                                   min_samples_split=3,                                   min_samples_leaf=1,                                   min_weight_fraction_leaf=0.0,                                   max_features=4,                                   random_state=None,                                   max_leaf_nodes=8,                                   min_impurity_split=1e-07,                                   class_weight=’balanced’,                                   presort=False)   iris = load_iris() …

決定木分析のパラメータ解説 Read More »

Pythonトップライブラリ2018

Pythonは、学習初期でも先人の作ったライブラリを利用することで、高速に開発が可能になります。 Pythonライブラリを管理する PyPi.org では、現在 100万以上のライブラリが公開され、現在も増加中です。 前回の記事は2018年の大人気のライブラリを紹介します。   年末でKdnuggetsがGithubの「星」と投稿者の人数とコメント数からトップ15のライブラリを発表しました。下記の図はGithubの「星」と投稿者の人数で表します。ては、ライブラリを軽いに紹介します。 1 – TensorFlow (投稿者 – 1757, コメント数 – 25756, 星 – 116765) Googleの機械学習/ディープラーニング/ネットワークライブラリです。柔軟なアーキテクチャにより、1つのAPIを使用してデスクトップ、サーバー、またはモバイルデバイスの1つ以上のCPUまたはGPUに計算を展開できます。またコードはやや書きにくいのが特徴になります。PyTorchおよびChainerの利点はDefine by Run(動的計算グラフ)と呼ばれる特徴です。Define by Runは入力データのサイズや次元数に合わせてニューラルネットワークの形や計算方法を変更することができます。       2 – pandas (投稿者  – 1360, コメント数 – 18441, 星 – 17388) 機械学習やディープラーニングの前処理のために、データの集計をするライブラリになります。数値や時系列のデータの操作や、データ構造をいじったりすることができます。また最近では、可視化も可能になってきています。     3 – scikit-learn (投稿者 – 1218, コメント数 – 23509, 星 – 32326) NumPy, SciPy や Matplotlib と互換性を持つように開発されてクラスタリングや回帰、分類器、次元圧縮、データの前処理をはじめとする、機械学習のアルゴリズムを幅広く実装しているライブラリです。   …

Pythonトップライブラリ2018 Read More »

決定木分析

前回の記事は複数の決定木を作成するランダムフォレストを説明しました。決定木のモデルを分からない人があるかもしれません。今回の記事は決定木を説明します。   決定木とは 決定木((Decision Tree:デシジョン ツリー)は予測や分類を目的として使われる教師あり機械学です。段階的にデータを分割していき、木のような分析結果を出力する」ものです。モデルをツリーで表現できるので、どの説明変数が目的変数にどのように効いているのかが視覚的な手法です。目標は、1つのグループ内のすべての要素が同じカテゴリに属するようにデータをグループに分割することです。   決定木分析の長所 説明変数と目的変数にどのように効いているのかが視覚的に分かりやすいというメリットがあります。 数値データとカテゴリデータも対応できるモデルです。 正規化のデータ準備が必要ではありません。 過剰適合しやすく汎化性能が低いです。 「分類」にも「回帰」にも利用可能です。   主要な決定木分析のアルゴリズム 複数ある機械学習アルゴリズムによって異なります。以下に、そのアルゴリズムの一覧を記載します。 種類 分岐に利用する情報 分岐数 目的変数の型 説明変数の型 特徴 CHAID カイ2乗値 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 学習アルゴリズムの中で、最も古いものとして知られています。CARTやC5.0では過学習させてから枝刈りを行いますが、CHAIDでは過学習が起こるまえに木構造の生長を止めます。 CART ジニ係数 2分岐まで 数値変数・カテゴリカル変数 数値変数・カテゴリカル変数 CARTは、C5.0と並び、決定木を構築する代表的なアルゴリズムとして用いられています。CARTでは、過学習を避け、正確な予測モデルを構築するために、いったん木を生長させた後に枝刈りを行います。 ID3 エントロピー 2分岐まで カテゴリカル変数 数値変数・カテゴリカル変数 「繰り返し2分木生成器」と呼ばれる学習アルゴリズムです。最も単純な機械学習アルゴリズムとしても知られています。ヒストリカル変数に対して情報量を用いて、木を構築します。 C4.5 エントロピー 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 ID3の改善版となる学習アルゴリズムです。メモリ効率が良く、意思決定ツリーが小さく、またboostingと呼ばれる技術により高精度であることが利点です。 C5.0 エントロピー 3分岐以上可能 カテゴリカル変数 数値変数・カテゴリカル変数 C4.5の改善版で、決定木を構築する代表的なアルゴリズムのひとつです。C4.5に比べ、より効率的にメモリを使用することでパフォーマンスの改善が行われています。CARTとよく似ていますが、CARTでは常に2分木構造の決定木を生成しますが、C5.0では3分岐以上の木を生成することができます。   では、Pythonの scikit-learnで決定木のモデル作成し、dtreevizで可視化します。 …

決定木分析 Read More »

Azure ML StudioのTune Hyper Parameterのオプション解説

前回の記事は【Azure ML StudioでのTwo class decision forestのパラメータチューニング】を説明しました。 今回の記事では、Azure ML Studioで機械学習モデルのパラメータ最適化の「Tune Hyper Parameter」のお話になります   各アルゴリズムは既定のパラメータを利用して、実験しているため、最適化されていません。ただし、どのパラメータを変更すればいいのは手間になります。そういう時に利用するモジュールが、「Tune Hyper Parameter」です。このモジュールは、適当に何個かのパラメータを用意し、それぞれの組み合わせで試した後、一番精度の高かったパラメータの組み合わせを学習モデルとして利用できるようになります。そのため各パラメータの最適値を見つける時に、用います。   前回のモデルはTwo class decision forestで献血の過去のデータから、献血の分類モデルを作成しました。     テストデータのAUCは0.632の結果の結果から改善できるか試していきます。   ハイパーパラメータ最適化 「Tune Hyper Parameter」とは、適当に何個かのパラメータを用意し、それぞれの組み合わせで試した後、一番精度の高かったパラメータの組み合わせを学習モデルとして利用できます。   設定するときは、検索範囲を定義し、無作為に選択された有限数のパラメータを使用するか、定義したパラメータ空間を網羅した検索を行います。   Random sweep(ランダムスイープ)決められた回数で、値の範囲を指定し、ランダムに検索されます。   Grid sweep(グリッドスイープ)このオプションは、指定した値の範囲内のすべてのパラメータの組み合わせで、値を検索します。このオプションでチューニングを開始すると、複数のモデルがこれらのパラメータの組み合わせを使用して訓練されます。   Entire grid(グリッド全体)全ての組み合わせで、検索していきます。このオプションは最も徹底的だと考えられますが、最も時間がかかります。   Random grid(ランダムグリッド)このオプションを選択すると、すべての組み合わせの中から、指定した回数だけ評価を行っていきます。     今回は「Random grid」を利用します。 Maximum number of runs on randomは120に設定しました。実際に120種類の組み合わせで試してみました。各組合せの結果は「Tune Model Hyperparameters」を右クリックし、「Sweep Results」>「Visualize」で確認できます。 …

Azure ML StudioのTune Hyper Parameterのオプション解説 Read More »

Azure ML studio Two class decision forestのパラメータ解説

前回の記事は【Azure Machine Learning Studioのモデル作成・デプロイするサービス】を説明しました。 この記事では、Azure ML StudioでTwo class decision forestモデルをお話になります   Two class decision forestとは(ランダムフォレスト) 決定木を弱学習器とする集団学習アルゴリズムであり、この名称は、ランダムサンプリングされたトレーニングデータによって学習した多数の決定木を使用しています。つまりランダムフォレストのようなものになります。 詳細の説明はこちらです。 では、下記の献血の過去のデータから、献血の分類モデルを作成します。 「Two class decision forest」のモデルを作成します。 インポートデータを学習とテストを分けます。学習データからモデル作成します。そして、学習したモデルの予測結果とテストに対して評価します。 精度が高くするために、パラメータを変更します。 値が高ければ高いほど色んな組み合わせが試されるため、精度が上がる可能性が高まりますが、その分実行回数も多いため、結果を得られるまでの時間が長くなります。 設定の説明: Resampling method Bagging または、Replicateの木の構築方法を選択することができます。 Bagging(バギング)はブートストラップアグリゲーションとも呼ばれます。この方法では、各ツリーは、元のデータセットのサイズと同じサイズになるまで、元のデータセットを置換しながらランダムにサンプリングすることによって作成された新しいサンプルで作成されます。 Replicate(複製)各ツリーはまったく同じ入力データについてトレーニングされます。どの分割述語が各ツリーノードに使用されるかの決定はランダムなままであり、ツリーは多様になるだろう   Create trainer mode モデルの学習方法を選べます。 Single Parameter(単一パラメータ)モデルの構成方法がわかっている場合は、引数として特定の値のセットを指定できます。 Parameter Range(パラメータ範囲)最適なパラメータがわからない場合は、複数の値を指定し、Tune Model Hyper parametersモジュールを使用して最適な設定を見つけることによって、最適なパラメータを見つけることができます。提供された設定の複数の組み合わせを反復し、最良のモデルを生成する値の組み合わせを決定します。     Number of decision trees アンサンブルに作成する決定木の総数を示します。 より多くの決定木を作成することで、より良い精度を得ることができますが、トレーニング時間が長くなります。この値は、訓練されたモデルを視覚化するときに表示されるツリーの数も制御します。ただし過学習しやすくなります。   Maximum depth of …

Azure ML studio Two class decision forestのパラメータ解説 Read More »

クラスター数の決め方の1つシルエット分析

シルエット分析(Silhouette analysis)とは シルエットは、クラスターの解釈と一貫性な評価の手法です。各クラスターにどれくらいうまくグループしているかを簡潔にグラフィカルに表現します。 シルエット分析は、クラスタリングの結果を評価する事ができます。 シルエットプロットは、1つのクラスター内の各点が隣接するクラスター内のどの点にどれくらい近いかを示すもので、クラスター数などのパラメーターを視覚的に評価する方法です。 この評価の範囲は[-1、1]です。 +1に近いシルエット係数は、標本が隣接するクラスターから遠く離れていることを示します。クラスタリングの分離性能が良いと判断できます。0の値は、隣接する2つのクラスター間の決定境界にあるか、またはそれに非常に近いことを示しており、分離性能が悪い事を示しています。マイナス値だとクラスター化されたサンプルは間違ったクラスターに所属している可能性があります。できる限り1に近い事が目標になります。 実験: 今回の分析は、クラスター数の決め方法を説明します。 シルエットプロットは、3,5,6のクラスター数が、平均シルエットスコア以下になります。シルエット分析は、2と4のクラスター数は高いシルエットスコアになっています。シルエットスコアを使う時に、注意しないといけない事として分離の具合を評価している指標のため、クラスター数が少ないときは高くスコアが出ます。そのため、シルエットプロットも確認し、各クラスターの厚さが似ている事とシルエットスコアの先端部分が超えている事を確認し、クラスター4とします。 Out: For n_clusters = 2 The average silhouette_score is : 0.7049787496083262 For n_clusters = 3 The average silhouette_score is : 0.5882004012129721 For n_clusters = 4 The average silhouette_score is : 0.6505186632729437 For n_clusters = 5 The average silhouette_score is : 0.56376469026194 For n_clusters = 6 …

クラスター数の決め方の1つシルエット分析 Read More »

2019年のデータサイエンスのトレンド

2019年はデータサイエンス関連のブームの余波は続きます。機械学習、深層学習、AIなどの言葉は流行語になって、企業規模の大小を問わず、自社の生産性向上やサービス向上にAIを生かす試みを進めており、競争力を保つにはもはやAIの導入が不可欠になります。今回の記事は2019年のデータサイエンスで流行りやそうな話をまとめています。 IoTとAIを活かす製品・サービスが広がる IoTが広がることによって、あらゆるモノがインターネットにつながり、モノと情報をやり取りすることができるようになります。IoTからデータを集め、蓄積して、AI(人工知能:Artificial Intelligence)が活躍します。AIが分析することで、企業は新しい価値を創出し、より良いサービスや商品を提供できるようになるのです。新しいサービスを創り出すこともできるかもしれません。また、既存の商品をIoT化する道もあるでしょう。商品から収集されたデータを、AIが分析することで、商品に付加価値が生まれる可能性もあります。   AIのブラックボックスの解明 ディープラーニングは画像解析などの用途に用いられているが、ブラックボックスが多少あっても実用化に差し支えはないだろう。実はディープラーニングに否定的な人は少なくないんです。理由はブラックボックスの問題があるから。そんななか、ディープランニングの新しい可能性を拓く「説明可能な人工知能XAI(Explainable Artificial Intelligence)」を開発しています。Maximum activation analysis / Lime / Shapなどはブラックボックスの解明する技術の例です。 「説明可能な人工知能」は、どのような特徴を持って猫と判断したのか、その理由まで説明することができる次世代AIを指します。説明可能な人工知能の必要性はより広範でしょう。 自動機械学習 自動深層学習 AIプロジェクトを推進してくには、データ、データサイエンティスト、機械学習エンジニア、業務プロセスに精通する人材と、必要な要素はいくらでもでてきて、さらにコストと時間という問題も重なってきます。機械学習と深層学習は大量のハイパーパラメータ設定と計算資源を要します。計算時間も馬鹿にならなく、どのハイパーパラメータが良いのかを、学習を幾度と無く繰り返して決める必要があります。 機械学習の専門家でなくても高品質な画像分類モデルを生成できるというものですが、その背景にある理論がNeural Architecture Searchです。Neural Architecture Search(略称:NAS)が従来のニューラルネットワーク設計と違うのは、NASはニューラルネットワークのアーキテクチャ自体を最適化するということです。ネットワークの重みを最適化しますが、NASではニューラルネットワークの構造自体やパラメータを最適化したうえで、重みを最適化します。   AIを民主化する データとAI(人工知能)を使いこなす企業が競争上の優位を獲得します。データ量が膨大になると、データの背後にある構造やパターンなどのインサイトを人間が理解できない。そこで、よりデータを理解できるように機械学習や深層学習のようなアルゴリズムが進化しました。   Google、Microsoft、IBMなどのIT大企業のみならず、ベンチャー企業とスタートアップは新たなクラウドでのデータサイエンス支援サービスを提供しています。計算能力(コンピュート)の民主化、(2)アルゴリズムの民主化、(3)データの民主化、(4)才能(タレント)の民主化という四つの民主化を進めていきます。そのためにはAIの民主化、AIを誰でも使えるようになります。   https://hackernoon.com/great-power-great-responsibility-the-2018-big-data-ai-landscape-6a35bcf34f7f https://www.kdnuggets.com/2018/12/predictions-data-science-analytics-2019.html

時系列データの評価方法

  前回の記事は「時系列データの特徴」を説明しました。今回の記事は時系列データの評価方法を説明します。 モデル機械を評価するために、データを学習データとテストデータに分割することがよく使われています。学習データはモデルを作成し、テストデータはモデルの評価に使用されます。順番がシャッフルされてしまうため、時系列データに対しては使いにくいという問題がありました。各観測は従属的であるため、それらをランダムにグループに分割することはできません。 また、データリーケージ(Data leakage)の問題も発生します。 データリーケージ(Data leakage) データリーケージとは、モデルを作成るときに、本来知らないはずの情報(変数やデータ)を不当に使ってしまうことです。 手元のデータでは高い精度が出たのに、本番環境ではまったく精度が出ない、といった事態になります。   3つの時系列データモデルの評価方法を説明します。 1)Train-Test Splits:時間的順序を考慮した学習・テスト分割 2)Multiple Train-Test Splits:時間的順序を考慮した複数の学習・テスト分割 3)Walk-Forward Validation ではモデル評価の比額を実験しましょう。 東京の日平均気温の月平均値(℃) 1988年12月から2018年11月まで30年の月次気温データ(360件) データのパス   # sunspotデータロード from pandas import Series from matplotlib import pyplot series = Series.from_csv(‘ tokyou_temp.csv’, header=0) print(series.head()) series.plot() pyplot.show()   month Dec-88     8.4 Jan-89     8.1 Feb-89     7.5 Mar-89     9.6 Apr-89    15.6 Name:  temp, dtype: …

時系列データの評価方法 Read More »

マシューズ相関係数(MCC)のモデル評価

前回の記事は【ROC曲線とAUC】機械学習の評価指標を説明しました。今回の記事はマシューズ相関係数を説明します。 マシューズ相関係数とは マシューズ相関係数とはMCC(Matthews Correlation Coefficient)と言われて、2値分類モデルの精度をみる指標です。真陽性と陰陰陽性と陰性を考慮し、クラスが非常に異なるサイズであっても使用できるバランスの取れた尺度と一般的にみなされます。MCCは、本質的に、- 1と+1との間の相関係数値である。 + 1の係数は完全予測を表し、0は平均ランダム予測を表し、-1は逆予測を表す。 統計は、φ係数としても知られています。 MCCは、2×2コンティンジェンシーテーブルのカイ2乗統計量に関連しています。 Matthews Correlation Coefficient   では、PythonのSklearnで作成してみましょう。   import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split   from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_auc_score from sklearn.metrics import matthews_corrcoef from sklearn.metrics import accuracy_score from sklearn.metrics import f1_score from sklearn.metrics import confusion_matrix   # …

マシューズ相関係数(MCC)のモデル評価 Read More »