LogoMark.png

DataScience の変更点


#author("2020-07-11T14:13:49+09:00;2020-07-11T13:19:10+09:00","default:inoue.ko","inoue.ko")
#author("2020-07-11T14:56:03+09:00;2020-07-11T14:13:49+09:00","default:inoue.ko","inoue.ko")
*データサイエンス
Data Science
~

データサイエンス(Data Science)とは、データそのものの性質やデータを取り扱う手法を研究する科学全般を指す言葉で、[[統計学>Statistics]]、[[機械学習>MachineLearning]]、[[データマイニング>DataMining]]、可視化・・など、様々な分野を包括する概念です。

数値や文字(カテゴリ)として得られるデータを統計的手法や機械学習(近年の [[AI>ArtificialIntelligence]] の技術ベース)などを用いて分析・処理することによって、世界に潜む様々な物事の関係(モデル)を見出す科学であるとも言えます。
~

***CONTENTS
#contents2_1

~

**人類とデータ
人類は情報(データ)を交換・共有・蓄積することにより、独自の進化を遂げた生物です。その歴史には以下のような大きな転換点がありました((ちなみに、表の中で最も大きな革命は、「文字の発明」ではないかと考えます。インターネットを用いてWeb会議ができるようになった現在、最も進化したコミュニケーションスタイルは「遠隔・リアルタイム(同期)」コミュニケーションのように思われがちですが、IT基盤を支えるオープンソースの開発現場を見れば明らかなように、そこで用いられている手段は「場所も時間も拘束しない ''遠隔・非同期'' の 文字によるコミュニケーション」です。))。
|数万年前|言葉の発生|情報の交換・リアルタイムコミュニケーション|
|BC3500年|文字の発明|情報の蓄積・非同期コミュニケーション|
|105年|紙の発明|情報のモバイル化|
|1440年頃|活版印刷|情報の拡散|
|1945年|コンピュータ|情報処理の自動化|
|1989年|WWW|情報共有のグローバル化|

~
~

**モデルを見出すこと
***因果関係・相関関係
データサイエンスの最大の関心事は、物事の背景にある原理を探ることです。それは科学全般に言えることですが、従来の科学のように科学者の経験的な直感によってその仮説が生まれるのではなく、あくまでも、現実世界にあるデータからそれを数学的に導き出すということがデータサイエンスの特徴です。

「身長が高い人は、体重も大きい」、「気温が上がると、商品Aの売上が上がる」、「こういう動作をする人物は、商品を盗む可能性が高い」などなど、私たちのまわりには「ああすればこうなる(因果)」「ああであればこうである(相関)」という形でその関係を説明できることがたくさんあります。

「アクセルを踏み込むとスピードが上がる」のように、操作すればすぐわかる関係もあるし、「気温上昇と商品Aの売上上昇」のように、気づくのに時間がかかるものもあります。いずれにせよ、人間の脳は、何度か同じような経験をする(複数のデータをとる)ことで、「ああすればこうなるんじゃないか」とか「ああいうときはこうなんじゃないか」という法則を直感的に見出すわけです。
~

***ビッグデータ
しかし、人間の感覚・知覚や記憶力には限界があります。事項間の心理的な距離がありすぎてその関係に気づかない・・そんな法則がたくさん潜んでいる可能性があります。ここに登場したのが、大量のデータ(Big Data)から関係・ルールを見出すデータサイエンスの技術です。発想そのものは昔からあったものですが、近年のコンピュータの計算速度の飛躍的な向上、メモリーサイズの増大がそれをようやく可能にしました。

例えば、あるスーパーマーケットにおいて一定期間中の商品の売上データを全部使うと、「商品Aの売上と商品Xの売上が連動している」というような、人間では気づかないような相関関係が見つかることがあります。データから物事の背後にある仕組みを見出すことができれば、これを使って未来におこることを「予測」することができます。「商品Aを特売する日には、同時に商品Xの在庫も増やしておく・・」といった戦略が立てられるということです。

発見された連動関係を未来に利用するかどうかを決めるのは人間ですが、人間が気づかなかった参考情報が提供されるという点で、データサイエンスは、良くも悪くも、これからの社会の「意思決定」に大きな影響を与える存在となったといえるでしょう。

~
~

**関数について


***関数の式
この「入力(ああすれば)と出力(こうなる)」の間にある仕組みは、一般に「関数」と呼ばれます。
 y = f ( x )
教科書に出てくる関数の式ですね。ここで嫌になる方もいるかもしれませんが、もう少しお付き合いください。関数 f を一次の関係式と仮定すると、
 y = ax +b
と書くことができます。この「a, b によって特徴づけられた入力:x と出力:y の関係」というものが、物事の背景にある原理、未来を予測するためのモデル・・ということになります。
~

***数学の教科書であれば・・
2つの点 (2,5) , (4,9) を通る直線の式を y = ax + b として、 a ,b の値を求めよ・・みたいな問題で、
 5 = 2a + b
 9 = 4a + b
これを解いて、a = 2, b =1 ( 直線の式は y = 2x + 1)が答えです。

ここまでだと全然面白くないのですが、では「 x = 10 のときに y はいくつ?」という問いになると( 2 x 10 + 1 = 21 )、これがいわば「未来予測」で、少しは役に立ちそうな話になってきます。

しかし、現実的ではありません。
~

#image(LeastSquaresMethod.png,right,30%)
***実際の問題になると・・
数学の問題というのは、与えられるデータの数も値も、手計算で綺麗な解が導けるように与えられますが、実際の問題では、与えられるデータは必ずしも綺麗に直線上には並びません。例えば  (2,5) , (3,6) , (4,9) だったりします。

y = ax + b という直線的な関係を前提とした場合、データが2件であれば連立方程式を解いて a,b の解が求まりますが、3つ以上になると「解なし」つまり、普通の数学の問題としては回答不能になる可能性が大きくなります。

しかし、実際に複数のデータをグラフにプロットすると、明らかに比例関係が見てとれます(右上グラフ)。であれば、その関係を表現するための aとb を見出すことには意味があると言えるでしょう。

現実世界から得られるデータには様々な誤差が含まれていたり、他の要因が影響していたりして、その値はブレるのが普通です。手計算で綺麗に解けるものなどありません。

そこで実際には、[[最小二乗法>Google:最小二乗法]]という[[回帰分析>Google:回帰分析]]の手法を使ってパラメータ a,bを推定するのですが、結果からいうと、上記の3つのデータから推定されるのは、a=2.0, b=0.67 となります。もし、入力(x)が 16 であると想定すると、予測値(y)は、32.67 となります。

データサイエンスがやろうとしていることは、基本的にこの応用です。関数モデルをつくって「前提(x)がこうなら、結果(y)はこうなる」といったようなことを予測できるようにしたいわけです。

実際の現象は非常に複雑で、要因(変数)が多数ある(x0, x1, x2, x3, ・・・)だけでなく、それらが重層的に絡みあいます。この関数は非常に複雑なものになるので、関数の形を現実の予測に役立つようにするには過去の経験データも大量に必要になります。
~

***プログラム例
上記の計算を実際に行うプログラムの例を以下に掲載しています。
ipynb(JupyterNotebook)形式で、GitHubに置いていますが、レンダリングがタイムアウトする場合は、下の nbviewer 経由でご覧下さい。
-GitHub:[[LeastSquaresMethod.ipynb>https://github.com/koichi-inoue/JupyterNotebook/blob/master/LeastSquaresMethod.ipynb]]
-nbviewer:[[LeastSquaresMethod.ipynb>https://nbviewer.jupyter.org/github/koichi-inoue/JupyterNotebook/blob/master/LeastSquaresMethod.ipynb]]

~

***用語解説|説明変数と目的変数
関数モデルを '''y = f(X) ''' と書いた場合の、X が説明変数で、y が目的変数です((一般に入力の方が数(次元)が多いので y は小文字、X は大文字で書いたりします。y が値とすれば、X(大文字のエックス)はベクトル、 y がベクトルとすれば、Xは行列・・というイメージです。))。

-説明変数:explanatory variable
物事の原因となる変数。一般に x を使います。文献によっていろんな表現がありますが、以下、ほぼ同じ意味で使用されています。
--特徴量   feature / attribute
--データ   data
--予測変数  predictor variable
--独立変数  independent variable
--入力    input

-目的変数:target variable
物事の結果(予測)となる変数。一般に y を使います。文献によっていろんな表現がありますが、以下、ほぼ同じ意味で使用されています。
--ラベル   label
--ターゲット target
--応答変数  response variable
--従属変数  dependent variable

-付記:各種記事では X vs Y の組み合わせは以下のパターンが多いようです。
--説明変数 vs 目的変数
--特徴量 vs ラベル
--データ vs ターゲット &small(scikit-learn ではこの表現);
--予測変数 vs 応答変数
--独立変数 vs 従属変数
--入力 vs 出力
~
~


**データサイエンスの手法

***概要
まずは、様々な手法を分類した事例です。
-教師あり学習
--分類
--回帰
-教師なし学習
--クラスタリング
--次元圧縮
-強化学習
--機器制御
--戦略の構築(囲碁・将棋など)
-その他
--推薦(Recommend) &small(教師あり、教師なし)
--異常検知 &small(教師あり、半教師あり、教師なし)
--文章・音声・画像の生成
--同、変換
~

***可視化|Data Visualization
-可視化とは、物事の関係性を視覚的に捉えられるように、データを画像・グラフ・図表などに変換することを言います。代表的なのは「散布図」です。

-詳細:[[DataVisualization]]

~

***線形回帰|Linear Regression
-線形回帰は、''説明変数'' X と''目的変数'' y との間にある関係を求める、つまり y = f(X) となる関数 f を求める ''教師あり・回帰'' の代表的な手法です。

-詳細:[[LinearRegression]]

~

***ロジスティック回帰|Logistic Regression
-ロジスティック回帰とは、線形回帰分析を分類問題に応用したアルゴリズムで、例えば、商品を購入するか否か、衝突するか否か、採用すべきか否かなどの2値分類を、0から1の範囲の確率を示す[[ロジスティック関数>GoogleImage:ロジスティック関数]]を用いて推測します。

-詳細:[[LogisticRegression]](準備中)

~

***サポートベクターマシン|Support Vector Machine(SVM)
-サポートベクターマシンは ''教師あり・分類'' の手法の一つで、グループ間のマージン(余白)を最大化するという発想でデータを分類する手法です。与えられたデータが線形分離可能ではない場合は、カーネル法を併用して、データを高次元の特徴空間上へ写像するかたちで分類します。
[[GoogleImage:サポートベクターマシン カーネル法]]

-詳細:[[SupportVectorMachine]](準備中)

~

***決定木|Decision Tree
-決定木は、対象がどのカテゴリー(名義尺度)に属するかを予測する ''教師あり・分類'' の手法の一つで、条件分岐によってグループを分割します。意志決定の参考となる情報を得るためのグラフとなるもので、文字どおり、幹から枝葉へと向かう樹木のような有向グラフになります。
-詳細:[[DecisionTree]]

~

***ランダムフォレスト|Random Forest
-条件分岐をもった幾つかの決定木をランダムに構築して、それらの結果を組み合わせて、「分類」または「回帰」を行う多数決的な手法です。決定木の集合体を用いた「アンサンブル学習」と言われます。
-詳細:[[RandomForest]](準備中)
~

***ニューラルネットワーク|Neural Network(NN)
-ニューラルネットワークは、''教師あり・クラス分類'' の代表的な手法のひとつで、今話題のディープラーニングはその応用にあたります。
-詳細:[[NeuralNetwork]]
~

***主成分分析|Principal Component Analysis(PCA)
-主成分分析とは''教師なし・次元削減''の手法のひとつで、多数の説明変数を、少数の合成変数(複数の変数が合体したもの)に要約する手法です。
-詳細:[[PrincipalComponentAnalysis]]
~

***k-means法|k-means Clustering
-k-means法は、''教師なし・クラスタリング''の代表的な手法のひとつで、サンプルをグループ分けする目的で使用します。
-詳細:[[k-means]]

~

***付記:機械学習とデータマイニング
これまで紹介してきたいくつかの事例は、 [[機械学習>MachineLearning]]や [[データマイニング>DataMining]]という言葉と深い関係があります。

機械学習とは、大量のデータを利用した反復的な学習によって情報処理モデルを作成する手法のことで、一方、データマイニングとは、大量のデータから役立つ可能性のある未知の知見を抽出する発見的(heuristic)な手法のことです。

両者の目的の違いから言うと、機械学習の主目的が、入力データを「既知」の特徴と照合させる(「教師あり」で訓練する)ことにあるのに対し、データマイニングの目的は、データから「未知」の特徴を発見する(「教師なし」)ことにある・・というふうに、説明することができます。応用先という視点で言えば、機械学習の(今話題の)応用先は主に AIシステム。データマイニングの応用先は新たなビジネス・・ということができます。

~
~


**プログラムの開発環境
***Google Colaboratory
[[Google Colaboratory>https://colab.research.google.com/]] は、Googleアカウントさえあれば、すぐに学習をスタートさせることができる点、また個人のPCではハードルが高い GPU環境を使うことができる点で注目を集めています。

-[[Google Colaboratory>https://colab.research.google.com/]] > [[Jupyter Notebook>http://jupyter.org/]](python)
~

***Jupyter Notebook
IPython(Pythonを対話的に実行するためのシェル)と WebUI を組み合わせて、ブラウザから利用できる環境です。 

-[[Python]] :汎用プログラミング環境
-[[IPython>https://ipython.org/]] :Pythonを対話的に実行するためのシェル
-[[Jupyter Notebook>https://jupyter.org/]]:対話型プログラミング環境
-[[Anaconda>https://www.anaconda.com/anaconda-data-science-certification/]] :仮想環境の使い分けが簡単な統合環境
--Anaconda > Jupyter Notebook(Python)
--Anaconda > Spyder(Python)
--Anaconda > R-Studio(R)
~

***Orange
Orange は汎用のデータサイエンスツールで、スロベニア Ljubljana 大学のコンピューター情報サイエンス学部で開発が始まり、現在ではオープンソースとしてコミュニティベースで開発が続けられています。
-[[Orange]]:データフロープログラミング環境
http://orange.biolab.si
~
~

**Python ライブラリ
いくつかの定番ライブラリを紹介します。
~

***Pandas|データ解析用ライブラリ(BSD)
https://pandas.pydata.org/

Pandas は、データの読込、集計、並べ替え、欠損値の補完などを行うことができるライブラリで、データ分析の前処理段階で多く利用されます。.csv、.xlsx 他、多様な形式のデータを読み込みに対応しています。

データ分析の過程では、Pandasでデータを整形した後、NumPyで数値計算を行う・・といった流れになります。

Pandas の特徴は ''DataFrame'' にあります。DataFrame にはデータの平均値や行数などの情報把握、並替え、列名変更といったデータ整形機能があります。

-記事を独立させました > [[Pandas]]
~

***NumPy|行列演算等の数値計算モジュール(修正BSD)
http://www.numpy.org/

NumPy は、数値計算や行列演算を行うライブラリで、浮動小数点型の行列演算を高速に行える他、三角関数や平方根などの数値計算機能も豊富です。

NumPy は、データの前処理の終了後、整形済みデータに対して数値計算を行う際に利用されます。

~

***SciPy|NumPyベースの数値解析(New BSD)
https://www.scipy.org/

SciPyは、NumPy(配列オブジェクトとその他の基本的な機能を備えた )を基礎としたライブラリで、統計、最適化、積分、線形代数、フーリエ変換、信号・イメージ処理、遺伝的アルゴリズム、ODE (常微分方程式) ソルバ、特殊関数、その他のモジュールを提供します。
~


***Matplotlib|グラフ描画ライブラリ(BSD)
https://matplotlib.org/

Matplotlibは、Pythonの代表的なグラフ描画ライブラリで、2D・3Dを含めた多種類のグラフを描画することができます。Pandas、NumPy などと組み合わせてデータの概要把握やデータの特徴の可視化に、データ分析の様々な段階で使用されます。

~

***seaborn|ビジュアライゼーションライブラリ(BSD)
https://seaborn.pydata.org/ 

seabornとは、matplotlibをベースにしたグラフ描画ライブラリで、matplotlibよりも美しいグラフを簡単に描画できます。公式サイトによると、その特徴は・・
-matplotlibのデフォルトよりも美しいグラフテーマ群
-データのパターンを明らかにする美しいプロットのためのカラー選択ツール
-データのサブセット間の分布を可視化するための関数群
-複数種類のデータの線形回帰と可視化ツール群
-時系列データの状態推定と誤差推定の関数
-グリット状の複雑なグラフを簡単に描画するシステム
~

//***graph-tool|グラフの操作および統計解析(GPL)
//https://graph-tool.skewed.de/
//~

***scikit-learn|定番機械学習ライブラリ(BSD)
http://scikit-learn.org/stable/

scikit-learn (サイキット・ラーン)は Python用のオープンソース (BSD ライセンス) の機械学習ライブラリで、NumPy, SciPy や Matplotlib と互換性を持つように開発されています。データの前処理、分類、回帰、クラスタリングなど、機械学習のアルゴリズムを幅広く実装しています。

分類(クラス分類)向きのものと、回帰(予測)向きのもの、計7つの定番データサンプルも同梱されています。

-記事を独立させました > [[scikit-learn]]
~


***TensorFlow|機械学習用ライブラリ(Apache License 2.0 by Google)
https://www.tensorflow.org/

TensorFlowとは、Google がオープンソースとして開発・公開している、機械学習のためのソフトウェアライブラリで、Python 他いくつかの言語に対応しています。特に深層学習(ディープラーニング)向きのライブラリです。

TensorBoardと呼ばれる視覚化のためのツールが含まれていて、TensorFlowグラフを視覚化したり、画像等のデータを表示することもできます。

&small(Tensor(テンソル)とは線形的な量を表す概念を一般化したもので、多次元の配列として表現できるます。テンソル ≡ 多次元配列 と考えて良いでしょう。);
~

***Keras|ニューラルネットワークライブラリ(MIT)
https://keras.io/ja/

Kerasは、オープンソースのニューラルネットワークライブラリで、TensorFlow他の様々なライブラリの上部で動作します。標準的なニューラルネットワークに加えて、畳み込みニューラルネットワークと回帰型ニューラルネットワークをサポートしています。

~
~

**データライブラリ
データサイエンスの学習には、プログラムの動作を試すのにサンプルデータが必要になります。よく用いられる統計データサンプルを紹介します。
 なお、[[R>OpenSource]] や [[Orange>OpenSource]] には、はじめからデータサンプルが同梱されていて、その中には、以下で紹介する著名なデータセットも含まれています。
~

***統計用データリポジトリ

-SSDSE(Standardized Statistical Data Set for Education)
教育用標準データセット。主要な公的統計を地域別に一覧できる表形式のデータセットで、データ分析のための汎用素材として作成・公開されています。
https://www.nstac.go.jp/SSDSE/

-朱鷺の杜(ときのもり)Wiki|DataSet
http://ibisforest.org/index.php?DataSet

-UCI Machine Learning Repository 
カリフォルニア大学アーバイン校が運営する、機械学習やデータマイニングに関するデータの配布サイトです。
http://archive.ics.uci.edu/ml/index.html

-''Kaggle''|The Home of Data Science & Machine Learning
世界中の機械学習・データサイエンスに携わる人が集まるコミニティー
https://www.kaggle.com/

-GitHub
https://github.com/awesomedata/awesome-public-datasets

-AWS パブリックデータセット
Amazon AWSが公開する誰でも無料で利用可能なパブリックデータセット。衛星写真、ゲノムデータ、ニュースのモニタリングデータなど、様々なデータが公開されています。
https://registry.opendata.aws/

-国立情報学研究所
https://www.nii.ac.jp/dsc/idr/datalist.html
~

'''''以下、個別のデータセットで著名なものの一例です。'''''

~

***iris.csv
irisデータとは、英国の植物学者ロナルド・フィッシャー氏が 1936年の論文に発表した多変量データです。  ''Iris setosa''、''Iris virginica''、''Iris versicolor'' という3種類のアイリス(あやめ)について、それぞれ 50サンプルずつ集めた、計150件のデータからなるデータセットで、変数は、がく片の長さ、がく片の幅、花びら長さ、花びらの幅(単位はいずれも cm)の4つです。
 以下、様々なURLから、そのデータを取得することができます。また Python のライブラリにも付属しているので、回帰分析や多変量解析など、様々な事例学習にサンプルとして利用できます。
-http://archive.ics.uci.edu/ml/datasets/Iris
---https://archive.ics.uci.edu/ml/machine...databases/iris/iris.data
-https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv
-https://ja.osdn.net/frs/g_redir.php?m=kent&f=irisdss%2FIRIS.csv

~

***HairEyeColor
統計学を受講する592人の学生について、髪と目の色と性別の分布。
-https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/datasets/HairEyeColor.csv
~

***The Boston Housing Dataset
ボストンの物件の価格と、物件の人口統計に関する情報。

CRIM・・・犯罪発生率(人口単位)
ZN・・・25,000平方フィート以上の住宅区画の割合
INDUS・・・非小売業の土地面積の割合(人口単位)
CHAS・・・チャールズ川沿いかどうか(1:Yes、0:No)
NOX・・・窒素酸化物の濃度(pphm単位)
RM・・・1戸あたりの平均部屋数
AGE・・・1940年よりも前に建てられた家屋の割合
DIS・・・ボストンの主な5つの雇用圏までの重み付きの郷里
RAD・・・幹線道路へのアクセス指数
TAX・・・10,000ドルあたりの所得税率
PTRATIO・・・教師あたりの生徒の数(人口単位)
B・・・アフリカ系アメリカ人居住者の割合(人口単位)
LSTAT(%)・・・低所得者の割合
MEDV・・・ 所有者が住んでいる住宅価格の中央値(単位 $1000's)

-https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html
--http://lib.stat.cmu.edu/datasets/boston
-https://raw.githubusercontent.com/selva86/datasets/master/BostonHousing.csv
~

***Wine Quality
ポルトガルワインの一種であるヴィーニョ・ヴェルデ(Vinho Verde)を測定したデータで、データセットは赤ワインと白ワインの2種類のデータ群からなります。ワイン(銘柄不明)ごとに測定された13種類の成分データとそのワインの味を評価したグレード(数値)がわかります(グレードは3人以上のワイン査定士が評価した結果の中間値で、「0:とてもまずい」 から 「10:絶品」まで。

Alcohol・・・アルコール
Malic acid・・・リンゴ酸
Ash・・・灰
Alcalinity of ash・・・灰のアルカリ性
Magnesium・・・マグネシウム
Total phenols・・・フェノール類全量
Flavanoids・・・フラバノイド
Nonflavanoid phenols・・・非フラバノイドフェノール類
Proanthocyanins・・・プロアントシアニン
Color intensity・・・色彩強度
Hue・・・色調
OD280/OD315 of diluted wines・・・蒸留ワインのOD280/OD315
Proline・・・プロリン

-https://archive.ics.uci.edu/ml/datasets/wine+quality
--http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv
--http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv
--http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality.names
~


***THE MNIST DATABASE
手書き文字のサンプルデータ配布サイト。MNIST(エムニスト)は、手書きの数字画像セットで、28 x 28 ピクセル、0 (白) ~ 255 (黒) の値からなる画像が計70,000枚。そのうち60,000枚はトレーニングセットで10,000枚はテストセット。画像認識のサンプルとして有名です。
http://yann.lecun.com/exdb/mnist/
~

***MegaFace and MF2
約70万人分の顔写真(同一人につき複数画像)が用意されています。顔認証の機械学習のサンプルに使えます。
-http://megaface.cs.washington.edu/

~
~


**APPENDIX
***関連ページ
//-[[DataScience]]
-[[Data]]
-[[Statistics]]
-[[DataVisualization]]
-[[MachineLearning]]
--[[DecisionTree]]
--[[k-meansClustering]]
--[[k-means]]
--[[LinearRegression]]
--[[LogisticRegression]]
--[[NeuralNetwork]]
--[[PrincipalComponentAnalysis]]
--[[RandomForest]]
--[[SupportVectorMachine]]
-[[DataMining]]
-[[ArtificialIntelligence]]
-[[ArtificialIntelligence/Links]]

-[[Python]]
--[[scikit-learn]]
-[[Orange]]:Open source machine learning and data visualization.

-[[OpenData]]
~
~