全て

正則化のLasso回帰とRidge回帰

前回は線形回帰とロジスティック回帰を説明しました。この記事では、正則化したLasso回帰とRidge回帰をお話になります。 回帰モデルで過学習を防ぐ方法の1つとして、誤差関数(二乗誤差関数など)に次の式で表される正則化項を加えて最小化します。正則化項を用いる回帰をリッジ回帰と呼びます。 正則化項を加えるメリットは以下になります。1.変数が多い時に発生する過学習を抑える事が出来る。2.相関があるような変数の影響を抑える事が出来る(但し一致性は保証されない)。3.相関の高い変数群がある場合、Lasso/Ridgeはその中の1つしか変数として選択できない。4.係数が小さくなる。 Ridge回帰 Ridge回帰では、L2正則化を用いています。L2ノルム(係数のユークリッド長)に対してペナルティを与えます。alpha値を設定することにより、係数への制約を調整できます。 pythonでRidge回帰を作成しましょう。先ず、ライブラリーのインポートとデータセットを作成します。 import matplotlib.pyplot as plt import numpy as np from sklearn.cross_validation import train_test_split from sklearn.datasets import make_regression from sklearn.linear_model import Ridge from sklearn.metrics import mean_squared_error # サンプルデータ作成 1000サンプル、300 特徴量 X, y, w = make_regression(n_samples=1000, n_features=300, coef=True,                           random_state=1, bias=3.5, noise=35)   モデル作成し、test scoreを計算します。 alphas = 0.1, 1,5, 10, 100   # 学習 テスト 分ける X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=3)   clf …

正則化のLasso回帰とRidge回帰 Read More »

Mnistで深層学習入門 活性化関数 時間/精度比較

最近、ニュースや記事でよく目にする、耳にする“ ディープラーニング(Deep Learning) ” 。ディープラーニングに興味ある方が多方面に増えてきている一方で、Deep Learningについて知りたいけれども、実際よくわからないと感じている方も多く見受けられます。この記事はディープラーニングについて説明します。過去に紹介してきたクラスタリングや回帰分析とは異なります。 ディープラーニングとは ディープラーニング(deep learning)または深層学習とは、人間の脳神経回路を模したニューラルネットワークを多層的にすることで、コンピューター自らがデータに含まれる潜在的な特徴をとらえ、より正確で効率的な判断を実現させる技術や手法です。 具体的な例は、世界囲碁トップレベルに勝利した人工知能の囲碁プログラム「AlphaGo」のアルゴリズムはディープラーニングです。 「機械学習」と「ディープラーニング」の違いとは? ディープラーニングは機械学習をさらに発展させたものだ。従来の機械学習との大きな違いは、情報やデータを分析する際に使う枠組みが異なっていること。構成、データ量、コンピューティングソースなどの異は下記の表にまとめました。 実験 ディープラーニングを実験すると思っていたところ、kerasでmnistのデータを画像分類します。 Kerasは,Pythonで書かれた,TensorFlowまたはCNTK,Theano上で実行可能な高水準のニューラルネットワークライブラリです. Kerasは,コードが書きやすく、迅速な実験を可能にすることに重点を置いて開発されました. アイデアから結果を得るまでの時間を早くする事で試行錯誤をしやすいというメリットがあります。 mnistのデータ 28×28ピクセル、白黒画像の 手書き数字 のデータセットになります。各ピクセルは0(白)~255(黒)の値をとる。6万枚の学習用画像と1万枚のテスト画像が入っています。今回は活性化関数を変えながら精度と時間比較をしてみます。 https://keras.io/ja/datasets/#mnist 実行環境 Python3.6 Anaconda 5.2.0 Jupyter Notebook5.6.0 Python ライブラリー Tensoflow 1.10.0 Keras 2.2.2 Sklearn 0.19.1 mnist_kerasのPython import numpy as np import tensorflow as tf from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.optimizers import …

Mnistで深層学習入門 活性化関数 時間/精度比較 Read More »

ロジスティック回帰

前回の記事は線形回帰を説明しました。この記事では、回帰分析群のロジスティック回帰お話になります。 ロジスティック回帰とは ロジスティック回帰とは、2群で分けられた目的変数に対する,1つ以上の説明変数の影響を調べ、機械学習分類アルゴリズムです。ロジスティック回帰は、2群分類の最も簡単で一般的に使用される機械学習アルゴリズムの1つです。 実装が容易で、バイナリ分類の問題のベースラインとして使用できます。 ロジスティック回帰は、さまざまな分類問題に使用できます。 例えば、糖尿病の予測、チャーン分析、キャンペーンの応答など。 では、ロジスティック回帰のモデルを作成しましょう。 まず、データセットを作成します。   #ライブラリー import matplotlib.pyplot as plt import pandas as pd from scipy import stats import seaborn as sns #サンプルデータ作成 distA = stats.norm(30, 5) distB = stats.norm(15, 4) data = [] for i in range(100):     data.append((distA.rvs(), “A”))     data.append((distB.rvs(), “B”)) df = pd.DataFrame(data, columns=[“measurement”, “class”]) #データを表示する print(df.head()) …

ロジスティック回帰 Read More »

データ分析における過学習Overfittingの対策

前回の記事は回帰分析を説明しました。この記事では、回帰分析のお話になります。モデルを調整すると、精度よくなりますが、学習過ぎると過学習(Overfitting)になます。今回は過学習 / 未学習(Underfitting)を説明します。 過学習と 過学習とはoverfittingと呼ばれ、統計学や機械学習において、訓練データに対して学習されているが、未知データ(テストデータ)に対しては適合できていない、汎化できていない状態を指します。データが少ない時または、モデルが問題に対して複雑な時が原因だと考えられる事もあります。 未学習とは 未学習とはunderfittingと呼ばれ、訓練データから有用な特徴量を引き出して記憶することができず、やはり未知のデータへの予測性能は低くなってしまいます。   左の図は未学習です。線形モデルはトレーニングサンプルに適合するのに十分ではありません。 真ん中の図は、次数4の多項式は真の関数をほぼ完全に近似します。右の図は過学習で、モデルはトレーニングデータのノイズを学習してしまいました。 クロスバリデーションを使用して、オーバーフィッティング/アンダーフィッティングを確認することが出来ます。テストデータの平均二乗誤差(MSE)が低ければ、モデルの汎化性能(評価データへの適用能力)を正しく評価します。 Pythonのスクリプトの説明 # ライブラリーのインポート print(__doc__) import numpy as np import matplotlib.pyplot as plt from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_val_score # サンプルデータ作成 def true_fun(X):     return np.cos(1.5 * np.pi * X) np.random.seed(0) n_samples = 30 degrees = …

データ分析における過学習Overfittingの対策 Read More »

なぜpythonはデータサイエンスや機械学習に適しているのですか?

前回の記事「データサイエンスのプロダクションの4つの失敗理由」について話しました。データは新たな燃料といわれています。データが燃料であれば、人工知能や機械学習などのデータ科学ツールです。今回はデータサイエンスや機械学習の重要な武器としてpythonを紹介していきます。 データ科学と機械の学習分野で最も適しているツールはどのツールですか?という質問は簡単な質問ではありません。目的、環境、ユーザースキルに合わることを考える事が必要です。KDnuggets 2018 pollのデータサイエンティストの調査からは下記のグラフを表しています。   Pythonはより多くの人気を集め、データ科学者にとっての主要なプログラム言語になります。Tensorflowという深層学習フレームワークを作成したGoogleがこのフレームワークを作成しました。FacebookやYahooでも用いられています。 Pythonには、データサイエンスツールのトップへのスピンアップを促進する他の利点があります。 これは、サービスプロバイダーとしてのプラットフォームだけでなく、ほとんどのクラウドとうまく統合されています。 並列コンピューティングのマルチプロセッシングをサポートすることで、データサイエンスと機械学習における大規模なパフォーマンスを確保するという明確な利点もあります。 Pythonは、C / C ++で書かれたモジュールでも拡張できます。   なぜpythonはデータサイエンスや機械学習に適しているのですか? 簡単に学べるPythonの最も魅力的な要素は、この言語を学ぶことを目指す人は誰でも簡単かつ迅速に学習できることです。 Rのような他のデータサイエンス言語と比較すると、Pythonはわかりやすい構文を促進することにより、可読性が高いのが利点です。 スケールアップRのような他の言語と比較すると、Pythonはスケーラブルな言語として浮上してリードを確立しており、MatlabやStataのような他の言語より高速です。 Pythonのスケーラビリティは、Pythonに移行したYouTubeの場合のように、問題を解決するための柔軟性にあります。 Pythonは、さまざまな業界のさまざまな用途やあらゆる種類のアプリケーションの迅速な開発に適しています。 ライブラリPythonを推進する重要な要素は、利用できるさまざまなデータ科学/データ分析ライブラリです。 Pandas、StatsModels、NumPy、SciPy、Scikit-Learnは、データサイエンスの分野でよく知られているライブラリの一部です。 Pythonは、ライブラリが時間の経過と共に成長しているため、これで終わることはありません。 1年前の制約だと思ったことは、新しく問題に対処してソリューションをPythonがうまく扱うことになりました。 Pythonコミュニティ Pythonの驚異的な上昇の理由の1つは、そのコミュニティに起因するものです。 Pythonがデータ科学コミュニティにその範囲を広げるにつれ、ますます多くのボランティアがデータサイエンスライブラリを作成しています。 これは、今度は、最も現代的なツールを作成し、Pythonで処理する方法を導いています。広く普及しているコミュニティは、コーディングの問題を解決したいと望む人に簡単にアクセスできるようにしています。 グラフィックスと視覚化Pythonにはさまざまな視覚化オプションがあります。 Matplotlibは、Seaborn、pandas plotting、ggplotなどの他のライブラリが構築された堅実な基盤を提供します。 ビジュアライゼーションパッケージは、優れたデータ感覚、チャートの作成、グラフィカルプロット、ウェブ対応のインタラクティブプロットの作成を支援します。 Pythonは機械学習のツールですか?データサイエンスに関しては、機械学習はデータから最大限の価値を引き出すために使用される重要な要素の1つです。データサイエンスツールとしてのPythonを使用すると、機械学習の基礎を探ることが簡単かつ効果的になります。簡単に言えば、機械学習は統計、数学的最適化、確率に関するものです。これは、利用者が「分析」を簡単に行うことができるように、最も好ましい機械学習ツールになっています。任意の数学関数に名前を付けると、要件を満たすPythonパッケージがあります。数値的線形代数のNumpy、凸最適化のCVXOPT、一般的な科学計算のためのScipy、記号代数のSymPy、PYMC3、統計モデリングのStatsmodelがあります。ロジスティック回帰と線形回帰を含む機械学習アルゴリズムの基本を把握することで、シキット学習ライブラリを使用して機械学習システムを予測用に簡単に実装することができます。 Keras、Theano、TensorFlowなどのライブラリを使用して、中立的なネットワークや深い学習のためにカスタマイズするのは簡単です。 まとめ データサイエンスは急速に変化しており、データサイエンスから価値を引き出すために使用されるツールも増加しています。 最も人気のある2つの言語は、RとPythonです。 どちらも強みと弱みを持っています。 しかし、Googleのような技術の巨人がPythonを使用する方法を示し、学習曲線が短くて簡単になると、データサイエンスの世界で最も普及している言語になるはずです。 https://www.marutitech.com/python-data-science/ https://medium.com/@mindfiresolutions.usa/advantages-and-disadvantages-of-python-programming-language-fd0b394f2121 https://www.kdnuggets.com/2018/05/poll-tools-analytics-data-science-machine-learning-results.html

線形回帰

前回の記事は複数のクラスタリングのシリーズを説明しました。この記事では、回帰分析のお話になります。 では、線形回帰から始めましょう。線形回帰は、最も基本的なモデルです。しかし拡張してより複雑なデータ動作をモデル化することができます。 線形回帰とは 線形回帰とは、一般的に使用される予測分析方法です。目的変数 と 1 以上の説明変数の間の線形関係を使用して、目的変数を予測する分析です。例えば、過去の価格と売上増加の関係を分析して将来の価格戦略を決定できます。 では、Pythonで線形回帰実験しましょう。 標準的なインポートから始めます。 import matplotlib.pyplot as pltimport seaborn as sns; sns.set()import numpy as np   次は50件のサンプルデータを作成して、散布図を描きます。 rng = np.random.RandomState(1)x = 10 * rng.rand(50)y = 2 * x – 5 + rng.randn(50)plt.scatter(x, y); Scikit-Learn’s のLinearRegressionを利用し、線形回帰を作成します。 from sklearn.linear_model import LinearRegressionmodel = LinearRegression(fit_intercept=True)model.fit(x[:, np.newaxis], y)xfit = np.linspace(0, 10, 1000)yfit = model.predict(xfit[:, np.newaxis])plt.scatter(x, y)plt.plot(xfit, …

線形回帰 Read More »

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 »