k-means++

前回の記事にはGMMモデルとMini Batch K-MeansとSpectral Clusteringについて説明します。この記事では、k-means++について説明していきます。 k-means++とは k-means++法は、非階層型クラスタリング手法の1つで、k-means法の初期値の選択に改良を行なった方法です。 先ず、k-meansの初期値の流れは以下のようになります。 1. クラスタ数kを決める2. データが含まれる空間にランダムにk個の点(セントロイド)を置く3. 各データがセントロイドのうちどれに最も近いかを計算して、そのデータが所属するクラスタとする4. セントロイドの位置をそのクラスタに含まれるデータの重心になるように移動する(各セントロイドの重心が変わらなくなるまで3, 4を繰り返す)   k-meansのクラスタには、初期値が不適切であるときにうまく分類ができなかったりする問題も抱えています。下記のクラスタリングの結果は初期値(セントロイド)の問題について解決を図るためにk-means法の改良として考案されたのが,k-means++法です。 初期のクラスター中心をなるべく遠目におくという発想があります。まず始めにデータ点をランダムに選び1つ目のクラスタ中心とし、全てのデータ点とその最近傍のクラスタ中心の距離を求め、その距離の二乗に比例した確率でクラスタ中心として選ばれていないデータ点をクラスタ中心としてランダムに選んでいきます 普通のk-meansでやると以下のような感じで見るからに無様な結果になっています.これは初期セントロイドを乱数で割り当ててるために,近い位置にセントロイドが置かれた場合にこういう感じになってしまいます.   Python Scriptの説明 # ライブラリの読み込みfrom sklearn.cluster import KMeansimport numpy as npimport matplotlib.pyplot as plt#データロードdata = np.loadtxt(‘./data.txt’, delimiter=’ ‘)#k-means++モデル作成kmeans = KMeans(n_clusters=9, init=’random’, random_state=0)y_kmeans = kmeans.fit_predict(data)# グラフの作成plt.scatter(data[:, 0], data[:, 1], c=y_kmeans, s=20, cmap=’viridis’)centers = kmeans.cluster_centers_plt.scatter(centers[:, 0], centers[:, 1], c=’black’, s=100, …

k-means++ Read More »

データサイエンスのプロジェクトの4つの失敗理由

データサイエンスの力はデジタル新時代にある、ビジネスの業績に変化の影響を与えている。エコノミストは、データを将来の燃料といわれました。データが燃料であれば、人工知能や機械学習などのデータ科学ツールは、人生を改善するためにそれを使用するエンジンである。 データサイエンスというキーワードが注目されている。   注目と期待にもかかわらず、ほとんどのデータサイエンスのプロジェクトは失敗の結果の事実になっている。推定によると、データサイエンスのプロジェクトのほぼ85%が失敗する。 これは最適化のような事例において、非現実的な期待、貧弱なプロジェクト管理といったような理由等さまざまな理由で発生している。 この記事では、データサイエンス・プロジェクトの失敗の原因とその解決策を紹介する。 代表的な 4つの失敗理由と解決案 1)データ利用文化の支援が不足データを使わず、経験と勘に基づいて”直感”で判断する企業がよくある。データサイエンスのプロジェクトが開始されると、組織が意思決定にデータを使用する事がないため失敗します。 リーダーがデータを信頼していない場合、従業員はデータも使用しません。 解決案:ビジネスの文化を変えることになると、データの利用文化はトップマネジメントから始める必要がある。スモールスタートから始まり、 結果が表示されたら、プロジェクトを展開し、周りとコミュニケーションを促進し、データの理解から進めることはお勧めです。 2) データが多すぎる、またはデータが少なすぎるデータが多すぎる場合は、どのデータで判断するべきか分からなくなる。違うパラメーターで討議してしまうケースがよくある。一方、データが少なすぎる場合は、データで正しい判断ができないし、予測などのモデルは精度低いので、信頼できる予測が出来なくなる。 解決案:ビジネスに役に立つデータを特定することが重要です。 データ準備チームとデータ分析チームは、データユーザーと意思決定者とコミュニケーションすることが第一である。また、一貫でデータを管理するデータセンターが必要です。データセンターのチームは、データの使用権とデータの共有方法について責任がある。 3) 知識のサイロデータサイエンティストを雇っても、組織がデータサイエンスから利益を得られるとは限りません。データサイエンティストが別々に仕事をするとき。彼らの分析の結果は実行できません。彼らは実際の環境や限界を理解していないかもしれません。 解決案:意思決定者が彼らの絶滅を伝えることができる共同作業環境を作成し、データサイエンティストに定期的な相談をする必要がある。代替的に、データサイエンティストは、現実の状況を理解のために、短時間に意思決定者のチームのメンバーになる事も必要である。 4) 不明確なプロジェクト目標ほんとによくあるのですが、当初はビジネス目標の明確な理解はありません。経験の浅いデータサイエンティストは、間違ったビジネス目標に集中することがある。 モデルの精度を必要以上に引き上げようとし、費用やプロジェクトの遅延を招く可能性がある。 解決案:プロジェクトの初めに、目的と締め切りを明確することが必要である。本当は高い実現可能性の高い投資収益率のプロジェクトに焦点することです。 まとめ これらは、データサイエンス・プロジェクトを開始する際に成功するように役立つヒントである。 データサイエンティストは複雑に見えるかもしれませんが、複雑な管理はである必要はありません。データサイエンスは解決策ではありませんが、重要なツールです。 そして、すべてのツールと同様に、正しく使用することができれば、素晴らしい結果が得られます。 詳細な情報は以下をご覧ください https://www.forbes.com/sites/danielnewman/2018/06/28/5-fixes-for-your-failing-big-data-initiatives/#5e762a4d5a0b https://hbr.org/2018/01/are-you-setting-your-data-scientists-up-to-fail https://www.kdnuggets.com/2018/05/data-science-4-reasons-failing-deliver.html https://www.forbes.com/sites/forbestechcouncil/2018/07/13/tips-to-make-your-next-data-science-project-a-success/#5871022e6785 https://www.mckinsey.com/business-functions/mckinsey-analytics/our-insights/ten-red-flags-signaling-your-analytics-program-will-fail

スペクトラルクラスタリング

クラスタリング分析の話になっております。前回の記事にはGMMモデルとMini Batch K-Meansについて話しました。この記事では、スペクトラルクラスタリング(Spectral Clustering)について話していきます。 スペクトラルクラスタリングとは スペクトラルクラスタリングとは、クラスタリングの機械学習の方法のうち、教師なし学習に分類されます。スペクトルクラスタリングでは、データをグラフに置き換え、繋がりがある近いデータ程一緒にわけられやすくなっています。 KMeansやGaussian mixture modelはクラスタの中心点からの距離に基づいてクラスタリングのモデルですが、スペクトラルクラスタリングでは連結性に注目してクラスタリングのモデルのため、KMeansやGaussian mixtureではうまくクラスタリングできなかったようなデータをうまくクラスタリングできることがあります。 下記の円形と月形のグラフのクラスタリング結果を見ると、スペクトラルクラスタリングがよく対応出来ています。但し、学習時間は20倍以上になっています。 Python Scriptの説明 # ライブラリの読み込み print(__doc__) import time import warnings import numpy as np import matplotlib.pyplot as plt from sklearn import cluster, datasets, mixture from sklearn.preprocessing import StandardScaler from itertools import cycle, islice np.random.seed(0) # データセット作成 n_samples = 1500 noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5,                                       noise=.05) …

スペクトラルクラスタリング Read More »

Mini Batch K-Means

クラスタリング分析の話になっております。前回の記事にはGMMモデルについて話しました。GMMモデルのクラスタリングは計算時間がそれなりにかかりますので、大量のデータのプロジェクトには合わない事があります。その際にはMini Batch K-Means (ミニバッチ k平均)モデルを用いる事も1つの選択肢になります。   ミニバッチとは部分的にサンプリングされた入力データの一部です。これらのミニバッチでクラスタリングを行い、計算時間を大幅に短縮します。K-meansの結果と比べると若干悪い結果をもたらす事があります。 正確な情報は以下をご覧ください http://scikit-learn.org/stable/modules/generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans モデルの比較 Pythonを使用してKMeansとGMMとMiniBatchKMeansを実装し、比較していきます。例えば大量の300,000件のサンプルのデータから各モデルの効率を比較します。下記の図は各モデルのクラスターの結果で、K-Means Mini BatchはK-Meansの半分実行時間になっております。(K-Means 2.95 Sec vs K-Means Mini Batch 1.47sec). GMMと比べるK-Means Mini Batchが三分の一の学習時間になります。学習期間が減らしましたが、クラスターの結果はほとんど変わりません。 MiniBatchKMeansは、大量なデータを学習の場合は K-Means Mini Batchは時間を節約するのに役立ちます。 Python Scriptの説明 <code> # ライブラリの読み込みprint(__doc__) import timeimport numpy as npimport matplotlib.pyplot as plt from sklearn.mixture import GMMfrom sklearn.cluster import MiniBatchKMeans, KMeansfrom sklearn.metrics.pairwise import pairwise_distances_argminfrom sklearn.datasets.samples_generator import make_blobs # 300,000件のサンプルを作成するnp.random.seed(0)batch_size …

Mini Batch K-Means Read More »

クラスター分析2 GMMモデル

前回の記事には クラスター分析 の手法について話しました。今回の記事は、KNNでは分離が上手くいかない時に使用するクラスタリング手法として混合ガウス モデル (GMM)を紹介します。ただし計算時間はそれなりにかかります。 GMMはGaussian mixture modelsの略称です。GMM は”ソフト クラスタリング” 方式と見なすことができます。ソフトクラスタリング方式では、1つの点に対して複数のクラスに所属する確率を出す事ができます。 sklearn.mixture のパッケージでGMM の学習を行う例を以下に示します。混合正規分布の密度を計算し,可視化するスクリプトを作成しています. GMM による分類結果は図中の等高線で表現されます。 これは学習された混合正規分布の高さになります。例えば実際のデータでは、顧客分布で初見さんがやや多く、常連さんの山があるような場合に相当します。当然初見さんが多く、常連さんの山があるという見方ができます。曲線の色はそれぞれの等高線ごとに分けています.以下では二つの分布になることがわかります。 Python Codeの説明 #ライブラリの読み込み import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LogNorm from sklearn import mixture #ランダムサンプル、2つの要素を作成する n_samples = 300 np.random.seed(0) # 地形データを作成 (20, 20) shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20]) # Gaussianデータを作成する C = np.array([[0., …

クラスター分析2 GMMモデル Read More »

AIプロジェクトを成功に導く方法 ―失敗例から学ぶ―

AI(人工知能)ブームが巻き起こりあらゆる業種の企業がAIの活用を検討するようになっています。AIは、次世代のビジネスの成長エンジンとして注目を集めています。だがその裏には多くの失敗が隠れています。うまく導入できない事例にも遭遇することがあります。この記事はAI導入をしていくのにあたっての失敗の原因・AI実装を成功に導くステップを解説していきます。 AI導入に失敗する代表的な6つ理由 1) 科学的なプロジェクト 素晴らしい技術より、ビジネスへどう影響を及ぼすかが大切です。AIプロジェクトを始めるのにあたって会社のゴール、売り上げに影響があるかと考えられないといけません。データ分析から始めても、影響を評価する事を考える必要があります。 2)共有不足 プロジェクト始まる時、プロジェクトメンバー全体が具体的な目的・目標・役割分担が必要です。理想の結果はどのようなものかといったことを、事前にきちんと考えておく必要があります。分析プロジェクトは大きければ大きいほど、皆の目標が見失いがちになります。そのため各自の役割、可視化・データ加工・分析フェーズ・データベース・実装・運用 実はそれなり以上に役割があります。 3)プロジェクトのポートフォリオを作成する AIプログラムを開始する際の次のステップは、ニーズと能力を体系的に評価し、次にプロジェクトの優先順位付けされたポートフォリオを開発することです。 4)新人のデータサイエンティストだった 実際のところ、AIは何が得意で、何ができないことを理解することが必要です。AI経験がないチームメンバーはこの判断能力が足らないですので、一つのよくある失敗のパターンになります。極端な話、モデルの精度がよくてもモデルだけ納品されても上手くいかないケースは往々にしてあります。 5)複雑なプロジェクトから始めパイロットモデルを作る 最初のAIプロジェクトが失敗すると、次のプロジェクトの立案することが結構難しくなります。リスクを減らすために、最初のプロジェクトは短い時間、分りやすいコールのプロジェクトはお勧めです。例えば可視化フェーズから始めしっかりデータ分析の価値を説明していく事が必要です。小さくパイロットで始め、大きくしていくがおすすめです。 6)技術のスコープ AIプロジェクトに運用する前に、技術の強みと制限を理解することが必要です。ルールベースのロボットは、自分の仕事の仕方が理解やすいですが、学習も改善が難しいです。一方、ディープ・ラーニングは大量のラベル付きデータから学習するのには適していますが、モデルの作成方法を理解することはほとんど不可能です。最近ハーバードビジネスレビュー(HBR)から「AIがあなたの会社のために3つのできること」を解決するための最新の調査をまとめたものが出ており、ここに代表的なものを紹介します。 引用元:  Artificial Intelligence for the Real World  https://hbr.org/2018/01/artificial-intelligence-for-the-real-world HBRがAIのプロジェクトをやったことがある250人に対して調査をしました。3/4の人はAIが3年以内に大幅に変革すると考えています。しかし、多くの企業で152/250≒約60%のプロジェクトが、ほとんどのプロジェクトが成功する可能性が低いと考えられています。 この記事では、利用されているAIを目的毎に分類し、3種類に考えています。 3 種類のAI 重要なのは技術ベースではなくビジネス機能に関してAIの種類を分けて考えています。 AIはビジネスプロセスの自動化 (Process Automation) データ分析による洞察力の獲得 (Cognitive Insight) 顧客や従業員との関わり支援 (Cognitive Engagement) 調査の結果から、152件のAIプロジェクトの内訳 1)Process Automation(プロセス自動化) 最も割合が大きいプロジェクトは、ロボットプロセス自動化(RPA)技術を使用して、デジタルおよびタスク(通常はバックオフィスの管理および財務活動)の自動化でした。RPAは最も安価で簡単に実装でき、通常は迅速かつ高い投資利益率をもたらします。 ただ、RPAには、定型事務作業を自動化するものです。機械学習等で高度な知的処理を自動化するものはデータサイエンティストが必要です。 難しい作業の例:● メールとコールセンターシステムから記録システムにデータを転送する。● 紛失したクレジットカードやATMカードを置き換える、複数のシステムにアクセスしてレコードを更新し、顧客とのコミュニケーションを処理する● 自然言語処理を使用して、法的文書および契約文書を抽出する 2)Cognitive Insight(認知洞察) 調査の2番目のプロジェクト(37%)は、膨大な量のデータのパターンを検出し、その意味を解釈するアルゴリズムを使用しています。 例えばキャンペーン施策を考えていく際に、〇〇地方、男性、年齢は××の人は申込が多いというような知見を得る際に行います。これらの機械学習の利用は、次の目的に使用されています。● 特定の顧客が購入する可能性が高いものを予測する。● リアルタイムで信用詐欺を特定し、保険金詐欺を検出する。● 自動車やその他の製造された製品の安全性や品質の問題を特定するために保証データを分析する。● デジタル広告のパーソナライズされたターゲティングを自動化する。 3)Cognitive engagement(認知エンゲージメント) 最初のAIプロジェクトが失敗すると、次のプロジェクトの立案することが結構難しくなります。リスクを減らすために、最初のプロジェクトは短い時間、分りやすいコールのプロジェクトはお勧めです。例えば可視化フェーズから始めしっかりデータ分析の価値を説明していく事が必要です。小さくパイロットで始め、大きくしていくがおすすめです。 自然言語処理のチャットボット、インテリジェントエージェント、機械学習を使用して従業員や顧客を関与させるプロジェクトは全体の16%を占めています。下記のような目的に使用されています。 自然言語でのパスワード要求からテクニカルサポートへの問題まで幅広く拡大している問題に対処する24時間年中無休のカスタマーサービスを提供するインテリジェントエージェント。 IT、従業員給付、人事方針などのトピックに関する社員の質問に答えるための内部サイト。 小売業者のパーソナライズ、エンゲージメント、セールスを向上させる製品とサービスの推奨システム   …

AIプロジェクトを成功に導く方法 ―失敗例から学ぶ― Read More »

クラスター分析

クラスター分析とは データのグループ化を含む機械学習技術になる。クラスターとは「集団」「群れ」を意味する英語で、その名の通り、データ全体をいくつかの集団(グループ)に分類する分析手法である。分類にあたっては、サンプル同士がお互いに「似ているか」または「似ていないか」を基準に分ける事ができる。この類似度・非類似度をもとにしたグループ分けの考え方の違いによって、多数のバリエーションが存在する。以下はクラスター分析の代表的な手法の「階層的手法」と「非階層的手法」について説明する。クラスター分析は多様な産業に使われる手法で、例えば下記のような使い方がある。 One to Oneマーケティングクラスター毎に求められる情報やアクションを予測し、ポジショニング確認を目的としたブランドの分類や、クラスターに応じておすすめ情報や配信キャンペーンに変化を付けるなど、最適なアプローチ戦略に役立することに用いられる。 小売小売でも商圏分析・価格弾力性分析・顧客分析・売り上げ予測といった様々な分析方法がある。その中でも顧客分析で、顧客を分類する事によってキャンペーン施策に繋げて、売り上げ増加を行う分析方法のときにクラスター分析が活躍する。例えば顧客の来店分析を以下のようにする事でクラスター分析を用いる。以下のグラフは、ある店の会員カードの使用回数である。   来店キャンペーン等で、初回は割引クーポン配布しており、利用で増えるがその後中々利用してもらえないのがネックであった。平均利用回数は、約4.2回のため5回利用の壁を突破するために5回利用した人に何か更にクーポンを渡そうか考えた。しかしよく上のグラフを見て欲しい。初回のキャンペーンで作ってそのままの人が多く、またヘビーユーザー層もおり、微妙に中間で使う人達がいるといった状態になっている。こういった層を上手くクラスタリングしてくれるのがクラスター分析である。例えば以下になる。 このクラスター別に、最適な販促を行っていく事が売り上げに繋がった。平均回数は分かりやすいが、個別事情といったものまで分析に取り入れられないのでデータ分布を確認し、分析をする事で最適なキャンペーン施策を立案する事が可能になった。 2種類のクラスター分析 階層的手法全てのデータ間の類似度(または非類似度)を計算した後、ある基準で似たもの同士を併合していく方法です。デンドログラム型(図1)の出力になるのが特徴になります。デンドログラムの縦軸は距離となっており、グループが結合した距離のところで線分が結合するようになっています。 図1:デンドログラム型   非階層的手法全体をあらかじめ決めておいたクラスター数に分割していく方法です。サンプル数が大きいビッグデータを分析するときに適しています。ただし、あらかじめいくつのクラスターに分けるかは、分析者が決める必要があり、最適クラスター数を自動的には計算する方法は確立されていません。代表的な手法としてk平均法(K-Means法)/Two-step法があります。情報量を用いて、最適なクラスター数に調整する事もできます。 図2:クラスター分析(非階層的手法)   Pythonでクラスター分析は、以下のように行う。 <pre><code><? $str = <<<‘EOD’import pandas as pdfrom sklearn import datasetsfrom sklearn.cluster import KMeansfrom matplotlib import pyplot as pltiris = datasets.load_iris()df = pd.DataFrame(iris.data, columns=iris.feature_names)result = KMeans(n_clusters=3).fit_predict(df[[‘sepal length (cm)’,’sepal width (cm)’, ‘petal length (cm)’,’petal width (cm)’]])</code></pre>   また数理的に最適だと思われる最適な数は以下のようにElbow plotを用いる事ができる。 <pre><code>distorsions …

クラスター分析 Read More »

なぜpythonは急に人気になっているのか

  Python(パイソン)はデータ分析や機械学習の分野で広く使われている。機械学習や深層学習における応用が進み、AIの実用化が研究されるなかでさらに需要が高まると見られる。この記事はPython言語の特徴から人気の理由まで徹底解説する。 実際にPythonはどのくらい人気かあるか確認していく。 IEEE Spectrumのインタラクティブ記事から人気プログラミング言語のランキング(図1)から、 Pythonは一位であり、詳細でみると、PythonはWeb開発やEnterpriseの製品がメインである。 近年データ解析やAIの分野で広く使われていることから、今後も需要が大きくなると予想される。 図1Interactive: The Top Programming Languages https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2017 pythonとは Pythonは、1991年にオランダ人のグイド・ヴァン・ロッサム氏によって開発されたプログラミング言語である。古くからある言語であり、Javaよりも古い。汎用のプログラミング言語である、読みやすく、また書きやすく作業性とコードの信頼性を高めることを重視してデザインされた言語である。さまざまな開発ニーズを満たすために使用されているため、Pythonを1つの仕事で使い始めると、関係のない業界にあっても簡単に別の仕事に利用することができる。システム運用、Web開発、サーバー管理ツール、機械学習、人工知能(AI)、業務アプリケーションなどに広い分野で使われている。 Pythonの特徴としては以下のようなものが挙げられます。 シンプルな構文 Python の構文は、よく使われているプログラム言語の中では比較的シンプルである。誰が書いてもコードが同じようになる言語を意識して作られている。他人の書いたコードも比較的読みやすくなる。 インデントの利用 インデントとは、プログラムの作成における入れ子構造である。文章のような頭の位置を変化させることで意味的な固まりを示される。プログラムの制御の流れが視覚的に分かりやすい。 オブジェクト指向 Pythonはオブジェクト指向言語のため、継承、ポリモーフィズム、カプセル化を最大限に活用して、見通しが良く、保守性が高いプログラムを記述することができる。 素晴らしいライブラリ Pythonにはたくさんの標準または外部ライブラリがあります。ライブラリを利用すると、開発時間を節約し、最初の開発サイクルを短縮するのに役立ちます。 PythonにはNumPyやSciPyといった学術計算用のWebサイト開発用のDjangoまで、ライブラリの優れた選択肢がある。 活発で支持的なコミュニティ ドキュメンテーションと開発者のサポートが不足しているプログラミング言語はうまくいかない。 Pythonには多くのドキュメント、ガイド、チュートリアルなどがある。 さらに、開発者コミュニティは信じられないほど活発です。それは、誰かが助けやサポートを必要とするときはいつでも、タイムリーに解決できる。 大企業のスポンサー 最後に大事なことですが、これは、プログラミング言語に企業のスポンサーがいる大きな時間を助ける。 C#にはMicrosoft、JavaにはSun、PHPはFacebookで使用されています。 Googleは2006年にPythonを採用して以来、多くのプラットフォームやアプリケーションでこれを使用してきた。GoogleではPythonを扱うための膨大な数のガイドとチュートリアルを作成しました。 まとめ 本稿では、pythonの特徴、人気の理由ついて解説しました。pythonは汎用のプログラミング言語で、作業性と信頼性であり、需要が大きくなると予想されている。webアプリの開発はもちろん、最近では人工知能の開発で注目を集めている。また、コミュニティと大企業のスポンサーがあるので、タイムリーに問題が解決できるようです。AIの急速な成長、第4次産業革命を推進している時代にpythonは一つの力になるでしょう。 https://ja.wikipedia.org/wiki/Python https://www.kdnuggets.com/2017/07/6-reasons-python-suddenly-super-popular.html 実際に以下はPythonでの簡単なプログラムでの実行と他の言語との比較である。