全て

クラスター数の決め方の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 »

Kerasでアクティベーションのパラメータチューニング

以前は「Mnistで深層学習入門」を説明しました。今回は、活性化関数(Activation Function)のパラメーター調整を説明します。活性化関数は、入力信号の総和がどのように活性化するかを決定する役割を持ちます。これは、次の層に渡す値を整えるような役割をします。 実験では活性化関数での計算時間及び精度を比較します。   Linear Linear activation(Identityとも呼ばれる)、最も単純な活性化機能の1つです。 これは、入力を出力に線形変換します。 ほとんど使われていませんが、その範囲とドメインは[-Inf; + Inf]になります。   Sigmoid Sigmoid は、[-Inf; + Inf]を(0; 1)の範囲に設定し、S字曲線のように見えます。 また、勾配消失問題が起こる可能性があります。勾配消失(Vanishing gradients)とは。層を増やすにつれて、バックプロパゲーションでは徐々に最初の層に近づくにつれて情報を伝達出来なくなり、学習速度が遅くなっていきます。   Hard Sigmoid 範囲[-Inf; -2.5]で0に等しくなります。 [-2.5,2.5]の範囲で0直線的に増加し、範囲(+2.5; + Inf)で1となる関数です。Hard Sigmoidの計算は、指数関数ではないため、Sigmoidの計算より高速であると考えられ、分類タスクについて合理的な結果が得られます。 しかし、正確には近似値なので、通常のシグモイドよりも誤差がはるかに大きいため、回帰タスクに使用するべきではありません。また勾配消失もおこりやすいとされます。   Hyperbolic Tangent (TanH) TanHはシグモイドのS字曲線によく似ていますが、その範囲は(-1; +1)です。 近年のRelu(ランプ)関数のようなアクティベーション関数が登場する以前にはかなり人気がありました。 Sigmoidの代わりにTanHを使用する利点 より強いグラジエント:データが0の周りに集中している場合、その微分はより高くなります。 範囲(-1; 0)を含むため、勾配の偏りを避ける。 しかし、Sigmoidと同様、TanHは勾配消失問題は起こりうります。   Softsign それは符号関数の連続近似であり、そのグラフはTanHと非常によく似ています。 しかし、TanHは指数関数的(exponential)ですが、Softsignは多項式(polynomial)です。   Rectified Linear Unit (ReLU) 非常に簡単で強力なアクティベーションです。 入力が正の場合は入力を出力し、そうでない場合は0を出力します。現在、SigmoidおよびTanHよりも優れた結果をもたらす事が多いです。勾配消失問題以外では、dying ReLU という問題が発生する可能性があります。 活性化関数ReLUは負の領域では値が0=勾配がないとう関数です。そのため学習時に大きく負側に重みが更新された場合、ReLU関数で活性化する事がなくなる可能性がある。 …

Kerasでアクティベーションのパラメータチューニング Read More »

PythonでXgboost

XGBoostは、最近人気のある機械学習アルゴリズムの1つです。 他の機械学習アルゴリズムよりも優れた結果をもたらすことはよく知られています。 XGBoostとは 複数の弱学習器を組み合わせることで強学習器を作る学習手法です。モデル結果は、前の瞬間の結果に基づいて重み付けされます。基本的に内部で行われていることは決定木を複数個作り、学習結果の修正を行っています。以前紹介したランダムフォレストとは違い、学習結果の修正が入っています。正しく分類されたインスタンスはますます重みが小さくなり、正しく分類されないインスタンスはますます重みが大きくなり続けます。最終的に、信頼度の重み付け平均の結果を用いて、最終的なモデルを作ります。   XGBoostの主な特徴 スピードとパフォーマンス:もともとC ++で書かれていて、他のアルゴリズムよりも高速です。 コアアルゴリズムは並列化可能:コアXGBoostアルゴリズムは並列化の恩恵が受けやすく、マルチコアコンピュータの能力を活用できます。 また、GPUやコンピュータのネットワークにも並列化が可能で、非常に大きなデータセットでも訓練が高速に可能です。 一貫して他のアルゴリズム手法よりも優れている事が多いです。さまざまなマシン学習ベンチマークデータセットでより優れたパフォーマンスを示しています。 幅広いチューニングパラメータ:XGBoost内部でクロスバリデーション、正則化、ユーザ定義の目的関数、欠損値、ツリーパラメータ、scikit-learn互換APIなどのパラメータがあります。 では、XGBoostで回帰問題を解きましょう。   サンプルデータのロード   from sklearn.datasets import load_boston boston = load_boston() print(boston.keys()) print(boston.feature_names) print(boston.data.shape)   dict_keys([‘data’, ‘target’, ‘feature_names’, ‘DESCR’, ‘filename’]) [‘CRIM’ ‘ZN’ ‘INDUS’ ‘CHAS’ ‘NOX’ ‘RM’ ‘AGE’ ‘DIS’ ‘RAD’ ‘TAX’ ‘PTRATIO’  ‘B’ ‘LSTAT’] (506, 13)   import pandas as pd data = pd.DataFrame(boston.data) …

PythonでXgboost Read More »

Azure Machine Learning Studioのモデル作成・デプロイするサービス

Azure Machine Learning Studio(以降AML Studio)というブラウザのGUIベースで分析をし、モデルを作成できるサービスがあります。AML Studioでは入力から機械学習モデルのトレーニングまでの一連の処理、またはWeb APIによる入力データの受付から予測を行う事ができます。その結果を出力する一連の流れをExperimentと呼び、1つの単位として管理します。そしてExperimentに対して画面上からWebサービスを作成することができます。   無料でGuestプランでも、8時間試すことが出来ます。下記のURLに入ると、[my experiments]を選択する事で試す事が出来ます。 https://studio.azureml.net/?selectAccess=true&o=2   先ず、左下にある[NEW]をクリックして、新しいモデル作成して見ましょう。   乳がん予測モデルや売上予測や与信分析など、幅広いモデルのサンプルがあるので、初心者でもモデル作成することが出来るのが、メリットです。 新規でモデルを作成していきます。[Blank Experiment]を選択してください。   入力データ AML StudioはcsvファイルやSQL DatabaseやAzure Blob Storage、DocumentDBなどのAzureのデータストレージを入力に用いる事ができます。 今回は、サンプルデータを利用します。 データセットはサンプルの[Breast cancer data]をドラッグアンドドロップします。   データセットの[①]を右クリックして、[Visualize]を選択します。 683件10項目の乳がんデータになります。検査値から乳がんか予測モデルを作成していく事になります。   サンプルデータセットの配置 画面左 [Data Transformation] → [Sample and Split] → [Split Data] をドラッグアンドドロップし、データモジュールから線を接続します。 [Split Data]のモジュールを選択し、右の設定画面のFraction of rows…に0.7を変更します。 この意味は70%学習・30%テストの二つに分割していく事になります。   モデル作成 AML Studioは様々なモデルがあります。又は、自分でPythonとRを書くことで分析をする事が出来ます。 今回はTwo-Class Decision …

Azure Machine Learning Studioのモデル作成・デプロイするサービス Read More »

時系列データとは?

時系列データとは、ある一時期の状態を表すような、時間的な変化を、連続的に観測して得られた値の系列のことです。例えば、毎日の売上データ、毎時間の気温、月ごとの来客数などです。時系列データの利用は、気候パターンの解析、交通状況の監視、人口統計学的傾向の調査データの事です。   一口に時間に関するデータといっても複数のタイプがあります。   ・点過程データ 間隔が一定ではないようなデータのタイプです。点過程データの目的は、事象が発生したという事を分析することです。地震・故障のタイミングや来客のデータに使われます。数量よりも発生するかどうかを分析のターゲットにしています。   ・時系列データ 時間的な変化を、連続的に得られたデータでそれぞれを直線で結んだものになります。通常時間のデータといえば、こちらを想定しています。   ・キューデータ 点過程データの一種になります。コールセンターの着信数・応答数、トランザクションログ、ATMの利用等の分析の時のデータタイプになります。   この中でも時系列データは「過去」と「現在」、そして「未来」があり、これらがつながっているデータであります。前の値によって、前の前の値が、現在の値に影響をしていることを「自己相関」と言います。データを時系列に並べることによって、過去の様子を分析することも可能ですし、これから先の事象について予測することが可能になります。しかし点過程データやキューデータでは過去に大きく依存しているかというとそうではありません。地震が起こるかどうかが前の起こったデータ見るのが難しいからです。また故障のタイミングも他の要因に起因している事も多く、要因から分析する事も多いからです。 では、時系列データを作成し簡単に分析してみます。   Python   import pandas as pd import numpy as np import matplotlib.pylab as plt   dateparse = lambda dates: pd.datetime.strptime(dates, ‘%Y-%m’) data = pd.read_csv(‘AirPassengers.csv’, parse_dates=[‘Month’], index_col=’Month’,date_parser=dateparse)     print (data.head()) plt.plot(data)                Month  …

時系列データとは? Read More »

ランダムフォレスト(分類分析)

ランダムフォレスト(Random Forest)とは   ランダムフォレスト(Random Forest)とは、分類や回帰に使える機械学習の手法です。前回までのリッジ回帰・ラッソ回帰は回帰問題つまり数値を予測する時にしか用いられません。これは最も柔軟で使いやすいアルゴリズムの1つです。 ランダムフォレストはランダムに選択されたデータサンプルによって決定木を作成し、各ツリーから予測を取得し、投票によって最良の解決策を選択します。例えばですが、決定木を5つ作り、5つのうち3つがA、2つがBならばAを選択します。また回帰問題の時は、5つが [10,12,8,4,14]と予測すれば、その平均値9.6、中央値10で予測します。   ランダムフォレストには、レコメンドエンジン、画像分類、機能選択など、さまざまな応用例があります。 というのも精度が非常に高く、評判の良いアルゴリズムになります。   アルゴリズムの4つのステップ 1.与えられたデータセットからランダムサンプルを選択する。 2.各サンプルの決定木を構築し、各決定木から予測結果を得る。 3.予測結果ごとに投票を行います。 4.最終的な予測として最も多くの票を有する予測結果を選択する。   特所 ランダムフォレストは、各決定木の特徴が異なり、複雑な意思決定ができます。 決定木と比較すると過剰適合(オーバーフィッティング 過去記事のリンク)の問題はありません。 主な理由は、すべての予測の平均をとることで、バイアスを相殺します。 ランダムフォレストは欠損値も処理できます。 これらを処理するには、中間値を使用して連続変数を置き換え、欠損値の近接加重平均を計算する2つの方法があります。 重要度を得ることができます。これは、分類子に最も寄与する特徴を選択するのに役立ちます。   短所 ランダムフォレストは、複数の決定木があるため予測の生成が遅い。 予測を行うたびに、フォレスト内のすべてのツリーは、同じ入力に対して予測を行い、その上で投票を実行する必要があります。 このプロセス全体は時間がかかります。 決定木と比較して、モデルは解釈が難しくなっています。なぜならば、複数の木が存在するためです。   Scikit-learnのランダムフォレストのpython   #ライブラリーのインポート from sklearn import datasets #Irisデータロード iris = datasets.load_iris() import pandas as pd data=pd.DataFrame({     ‘sepal length’:iris.data[:,0],     ‘sepal width’:iris.data[:,1],     ‘petal length’:iris.data[:,2], …

ランダムフォレスト(分類分析) Read More »

【ROC曲線とAUC】機械学習の評価指標

機械学習のモデル作成後にテストデータを使って「本当に良いモデルなのか?」という評価を必ず行う必要があります。今回の記事は分類問題に対して評価指標のROC曲線とAUCについて説明します。他にも評価指標は色々とあるので、随時記事にしていく予定です。 AUCとは AUCとは、二値分類器の評価指標として Area Under the ROC Curve の略です。サンプルに対して 0から1の範囲でスコア(確率)を与える二値分類器 の精度を評価することを考えています。予測スコアでサンプルを(降順)ソートしたときに、真値のTrue となるサンプルが 真値のFalse となるサンプルより上位にきているか』ということを測っています。つまり、ラベル 1 のサンプルに正しく高スコアを与える予測器であるか を見ています。   縦軸がモデルの予測で、横軸が正解データになります。 各象限の説明を簡単にすると、   True Positive(TP): 正解データ正であるものを、正しく正と予測できた数 False Positive(FP):正解データ負であるものを、間違って正と予測した数 Flase Negative(FN):正解データ正であるものを、間違って負と予測した数 True Negative(TN):正解データ負であるものを、正しく負と予測できた数   ROC曲線をプロット 先程の偽陽性率と真陽性率の表をプロットすると以下のようなグラフが出来上がります。このように、閾値を変化させたときの偽陽性率と真陽性率による各点を結んだものがROC曲線です。     閾値を移動させながらPositive / Negativeを判別していくことを考えます。そうすると閾値が0のときは全てNegativeに判断するので偽陽性は0になります。ここから閾値を増加させていくと偽陽性と真陽性が増加していきます。そして閾値が1となったとき全てPositiveと判断するので偽陽性は1になります。モデルの識別能力が高ければ左上に凸のグラフになりますが、識別能力が低ければグラフは対角線上に近づきます。   Sklearnのpython     # ライブラリーのインポート import numpy as np import matplotlib.pyplot as plt from sklearn import svm, …

【ROC曲線とAUC】機械学習の評価指標 Read More »