このリポジトリはデータサイエンスを一通りコンパクトに学ぶための「無料の」ドキュメントです。
4つのパートに分かれています。
Part 1:- [学習ロードマップ]
Part 2:- [無料のオンラインコース]
Part 3:- [500個のデータサイエンス関連プロジェクト]
Part 4:- [100個以上の(無料の)機械学習関連書籍]
このリポジトリは、インターネット上に散らばっている様々な資料を組み合わせて作ったものです。貴重な資料を組み合わせることで、構造化されたデータサイエンスの学習リソースを無料で提供し、 全ての初学者を助けるために作成されました。このリポジトリが、データサイエンスを学びたいけれど多額の教育費を払えない多くの人々の助けになることを願っています。 このリポジトリは、新しい資料がどこかで見つかる度に定期的に更新していく予定です。
もしこのリポジトリが気に入ったら、ぜひデータサイエンスの学習リソースを必要としている方に共有してあげてください。
更新情報については、元リポジトリの作成者のツイッター をフォローしてください。
この資料が有益だと思ったらGithub上で🌟をください、そして他のデータサイエンス愛好家たちにもぜひ共有してあげてください。
数学において、行列とは 行と列に配置された数、記号、または式からなる長方形の配列 です。 行列は行および/または列の任意の集合を削除することで、部分行列に分解することができます。
行列には適用できるいくつかの基本的な演算があります。
ハッシュ関数とは、任意のサイズのデータを固定長のサイズに変換できるあらゆる関数のこと です。利用法の一つにハッシュテーブルというデータ構造があり、 コンピュータソフトウェアにおいて高速にデータを参照するために広く用いられています。ハッシュ関数は、大きなファイルにおいて重複するレコードを検出することでテーブルやデータベースの参照を高速化します。
コンピュータ・サイエンスにおいて、二分木とは それぞれのノードが2つの子ノードを持つデータ構造 で、それぞれ「左右の」子ノードと表現されます。
コンピュータ・サイエンスにおいて、オーダー(O)記法はアルゴリズムにおいて 入力サイズが大きくなるにつれて必要になる実行時間と空間の増加量 を議論するために用いられます。また、解析的整数論においては、O記法はしばしば 算術関数と近似値の違いの境界を表現する ために用いられます。
関係代数とは、 関係データベースに格納されているデータをモデル化し、それに対するクエリを定義するために使用される、確立された意味論を持つ代数族 です。
関係代数の主な用途としては、関係データベース の理論的基礎を提供することが挙げられます。特にデータベースへのクエリ言語として、SQLがよく知られています。
SQLにおいて、2つのテーブル間の自然結合は以下の条件下で可能です。
- 少なくとも1つ以上の列が同じ名前を持っていること
- その列が同じデータ型を持っていること
- CHAR (文字)
- INT (整数)
- FLOAT (浮動小数点数)
- VARCHAR (文字列)
SELECT <COLUMNS>
FROM <TABLE_1>
NATURAL JOIN <TABLE_2>
SELECT <COLUMNS>
FROM <TABLE_1>, <TABLE_2>
WHERE TABLE_1.ID = TABLE_2.ID
INNER JOIN句は、両方のテーブルに存在するレコードを抽出します。
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
FULL OUTER JOIN句は左テーブル(テーブル1)もしくは右テーブル(テーブル2)に存在する全てのレコードを返却します。
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
LEFT JOIN句は左テーブル(table1)に存在する全てのレコードと、右テーブルにおいて合致する値を持つレコードを返却します。合致する値が無い場合は右の値がNULLになります。
SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
RIGHT JOIN句は右テーブル(table2)に存在する全てのレコードと、左テーブルにおいて合致する値を持つレコードを返却します。合致する値がない場合は、右の値がNULLになります。
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
CAP定理は、分散データストアにおいて次の3つの全てを同時に満たすことはできないとする理論です。
- 全てのread(読み込み)が最新の書き込み結果(かエラー)を受け取ることができる。(一貫性)
- 全てのリクエストが、(最新の書き込み結果であるという保証は無く、)(エラーではない)レスポンスを受け取ることができる。(可用性)
- ネットワークでつながるノード間で任意の数のメッセージを取りこぼし(もしくは遅延し)たとしても、システムが動作を継続することができる。(分断耐性)
言い換えると、CAP定理とは、「ネットワークが分断されている中では、一貫性か可用性のどちらかを選ばなければならない」ということを示しています。ただ、ここで言う一貫性はデータベーストランザクションにおけるACID特性で知られる「一貫性」の定義とは異なるということに注意してください。
表形式データはSQLのような関係データとは相対するものです。
表形式データにおいては、 全てが行と列に整形されています 。 全ての行は同じ個数の列を持っています。(ただし欠けているデータは"N/A"などで埋め替えられるとして。)
表形式データの 最初の行 はほとんどの場合 ヘッダ で、各列の名前や説明が記載されています。
データサイエンスにおいて最もよく使われる表形式データのフォーマットは CSV です。全ての列は1文字(タブやカンマなど)によって区切られています。
エントロピーは、不確実性の尺度 です。エントロピーが大きいということは、データの分散が大きく、情報やノイズが多く含まれていることを意味します。
例えば、すべてのxに対してf(x)=4となる定数関数は、エントロピーがなく、容易に予測可能であり、情報量が少なく、ノイズがなく、簡潔に表現することができます。同様に、f(x)=~4はある程度のエントロピーを持ちますが、f(x)=乱数はノイズのために非常に高いエントロピーを持っているといえます。
データフレームは、データのテーブルを格納するために使用される形式です。同じ長さのベクターのリスト、とも言えます。。
シリーズ(系列)とは、一連のデータポイントを並べたものです。
シャーディング とは、垂直方向(列単位)のパーティショニングである「正規化」に対して、水平方向(行単位)に行うデータベースのパーティショニング(分割)のことです。
シャーディングを使う理由は?
-
大規模なデータセットや高スループットのアプリケーションを持つデータベースシステムは、サーバ1台の容量では対応できない場合があります。
-
垂直方向のスケーリングと水平方向のスケーリングという2つのデータ増大に対応するため
-
垂直方向のスケーリングとは
- 1台のサーバーの容量を増やすことです。
- しかし、技術的、コスト観点の制約から、1台のマシンでは所定のワークロードに対応できない場合があります。
-
水平方向のスケーリング
-
データセットと負荷を複数台のサーバーに分割し、必要に応じてサーバー数を追加して容量を増加させることです。
-
1台のマシンの性能や容量は高くなくてもよいです 各マシンが全体的なワークロードの一部を処理するため、1台の高速・大容量サーバーよりもパフォーマンスを良くすることができます
-
分散システムの概念を利用して、規模の拡大を図ることができます。
-
しかし、分散システムでは、複雑性が増すというトレードオフがあります。
-
多くのデータベースシステムは、このシャーディングを行うことで水平方向のスケーリングを実現しています。
-
オンライン分析処理(OLAP)は、多次元分析(Multidimensional Analysis, MDA)のクエリにより速く答えるためのアプローチの一つです。
OLAPは、関係データベース、レポート作成、データマイニングなどを含む、ビジネス・インテリジェンスという幅広いカテゴリの技術の一部です。OLAPの典型的なアプリケーションとしては、 __販売、マーケティング、管理レポート、ビジネスプロセス管理(BPM)、予算の編成と予測、財務報告など__があり、農業などの新しいアプリケーションも登場しています。
OLAPという言葉は、従来のデータベース用語である「Online Transaction Processing(OLTP)」を少し変えたものとして生まれました。
-
抽出
- 複数の異なるソースシステムからデータを抽出する。
- 抽出されたデータが、特定のドメインにおいて正しい/期待される値を持っているかどうかを確認するデータの検証作業
-
Transform
- 抽出されたデータが、データの上に複数の機能用のパイプラインに供給できるようにすること
- 最終的なシステムに受け入れられる形にデータフォーマットを変換すること
- ノイズ、異常、余剰データを除去するために、データのクリーニングを行うこと
-
ロード
- 変換されたデータを対象システムに読み込む。
JSON(JavaScript object notation)は言語に依存しないデータのフォーマットです。たとえば「人」をJSONで表してみると以下のようになります。
{
"firstName": "John",
"lastName": "Smith",
"isAlive": true,
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021-3100"
},
"phoneNumbers": [
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "office",
"number": "646 555-4567"
},
{
"type": "mobile",
"number": "123 456-7890"
}
],
"children": [],
"spouse": null
}
XMLはマークアップ言語の一つで、人間にも機械にも読みやすい形で、ドキュメントをエンコードする一連のルールを定義します。
<CATALOG>
<PLANT>
<COMMON>Bloodroot</COMMON>
<BOTANICAL>Sanguinaria canadensis</BOTANICAL>
<ZONE>4</ZONE>
<LIGHT>Mostly Shady</LIGHT>
<PRICE>$2.44</PRICE>
<AVAILABILITY>031599</AVAILABILITY>
</PLANT>
<PLANT>
<COMMON>Columbine</COMMON>
<BOTANICAL>Aquilegia canadensis</BOTANICAL>
<ZONE>3</ZONE>
<LIGHT>Mostly Shady</LIGHT>
<PRICE>$9.37</PRICE>
<AVAILABILITY>030699</AVAILABILITY>
</PLANT>
<PLANT>
<COMMON>Marsh Marigold</COMMON>
<BOTANICAL>Caltha palustris</BOTANICAL>
<ZONE>4</ZONE>
<LIGHT>Mostly Sunny</LIGHT>
<PRICE>$6.81</PRICE>
<AVAILABILITY>051799</AVAILABILITY>
</PLANT>
</CATALOG>
NoSQLは関連データベースと相対する概念です。 __N__ot __O__nly SQL からきています。 データは構造化されておらず、テーブル間のキーの概念もありません。
複雑なデータ間の関係性を考えることなく、あらゆる種類のデータ(JSON、CSVなど)をNoSQLデータベースに保存することができます。
よく使われるNoSQLスタック: Cassandra, MongoDB, Redis, Oracle noSQL ...
正規表現 ( Reg ular ex pressions (regex)) は情報科学で一般的に使われています。
下記のような広い用途に使われます。
- テキスト置換
- テキスト内の情報を抽出(メール、電話番号など)
- .txtの拡張子を持つファイルのリストアップ ...
正規表現を試したい場合、http://regexr.com/ で実験することができます。
Python で正規表現を使いたい場合:
import re
確率と統計学において、母集団平均と期待値は同じような意味で 変数の確率分布の中心的な傾向の測定方法の1つ を指すために同じような意味で使用されます。
データセットを扱うとき、「算術平均」、「数学的期待値」、「平均」という用語は、離散的な数字の集合の中心値を指すときすらあり、それらは同じような意味の言葉として使用されますが、具体的には 「値の合計を値の数で割ったもの」 です。
中央値とは、データサンプル、母集団、または 確率分布の上位半分と下位半分を分ける値 のことです。簡単に言えば、データセットの「真ん中」の値と考えればよいです。
Numpy がpythonで統計的分析に用いられるライブラリとして広く知られています。
pip3 install numpy
import numpy
データの可視化と分析を行うデータサイエンスの初めの一歩といえる処理を「探索的データ分析(explanatory data analysis)」と呼びます。
生データではデータの分布が不適切な場合があり、問題につながる可能性があります。
例えばデータが直線的に分布しているのか、それとも螺旋状に分布しているのか、なども知っておく必要もあります。
Library used to plot graphs in Python
インストール方法:
pip3 install matplotlib
使用方法:
import matplotlib.pyplot as plt
Pythonで大規模なデータセットを扱うためのライブラリです。
インストール方法:
pip3 install pandas
使用方法:
import pandas as pd
もう一つのpythonのグラフ描画用ライブラリです。
インストール方法:
pip3 install seaborn
使用方法:
import seaborn as sns
PCAは主成分分析(Principle Component Analysis)と呼ばれるものです。
これまで見てきたように、データ分布の形を知りたくなることはよくあります。そのためには、データをプロットする必要があります。
しかしデータは多次元である可能性があります。つまり、データセットは複数の特徴量を持ちうるということです。
我々は2次元のデータしかプロットできないので、多次元データの場合は、多次元の分布を、分布の主たる成分を保ったまま2次元に投影し、2次元のプロットで実際の分布を把握します。
これは次元削減にも使われます。しばしば、いくつかの特徴量が、データの分布に対して重要な洞察に大きく寄与していないことがあります。このような特徴量はデータを複雑にし、次元を増加させるばかりなので。そのような特徴は考慮しないことでデータの次元を減らすことができます。
ヒストグラムは、数値データの分布を表すものです。範囲(ビン)に分割する作業を用いて数値を束ねていくことで構成します。 すなわち、データが取りうる値の範囲全体をいくつかの固定された区間に分割するのです。各範囲(ビン)に属するデータの個数または出現頻度が表現されます。
pythonでは、Pandas , Matplotlib , Seaborn などを使ってヒストグラムを作成することができます。
パーセンタイルとは、統計学における指標の一つであり、数値データの分布において、ある数値や事例を下回るデータがどれだけあるか、あるいはどれだけの割合であるかを表す値です。
たとえば、「70パーセンタイル」と言うと、それは「分布のうち70%のデータはその数値の中に含まれる」ことを意味します。
外れ値とは,他のデータ点とは大きく違いがあるデータ点(の数値)のことです。これらの点は、分布内の大部分の点とは異なります。このような点は、平均値や中央値のような分布の中心的な測定値に大きな影響を引き起こす可能性があります。そのため、こういった外れ値は検出して除去する必要があります。
外れ値を見つける際には ボックス図 がよく用いられます。 Seaborn ライブラリを使って作成することができます。
__確率__とは、ランダムな試行において事象の起きる可能性を数値化したものです。例えば、コインが投げられた場合、表が出る可能性は50%なので確率は0.5となります。
サンプル空間。ランダムな試行のすべての可能な結果の集合です。 好ましい結果。ランダムな試行で、出ることが求められている結果の集合です。
確率 = (好ましい結果の数) / (サンプル空間).
確率論: 確率という概念に関する数学の一分野です。
これは、別の事象がすでに発生しているときのある事象が発生する確率です。つまり、2つの事象とそれらの事象の発生確率の関係性を示すものです。
下記のように表されます。
P( A | B ) : Bが発生したうえで、Aが発生する確率
公式は下記のように表されます。
つまり、 P(A|B) はAとBの両方が発生する確率を、Bの発生確率で割ったものです。
Guide to Conditional Probability
ベイズの定理は、条件付き確率を計算する方法です。機械学習の中でも特にベイジアン分類器などで広く使われています。
ベイズの定理によると、 Bが既に発生している場合のAの確率 = Aの確率に、「Aが既に発生している場合のBの確率」をBの確率で割ったものを掛けたもの となります。以下のように表されます。
P(A|B) = P(A).P(B|A) / P(B)
確率変数とは、実験やランダムな出来事の結果として得られる数値のことです。通常、複数の値を持っています。
確率変数には大きく分けて2つの種類があります。
離散確率変数(Discrete Random Variables) :有限個の異なる値をとります。
連続確率変数(Continuous Random Variables) : 無限の値をとることができます。
確率論と統計学においては、x における実数値をとる確率変数の累積分布関数(Cumulative Distribution Function, CDF) X(もしくは単に X の分布関数)の値は、x 以下の値を取る確率を表します。
実数値をとる確率変数 Xの累積分布関数は以下の関数で表されます。
参考資料:
連続確率分布とは、連続確率変数がとりうる値の確率を表現します。 連続確率変数とは、連続値をとる、つまり特定範囲において無限の値を取りうる確率変数のことです。
歪度(スキュー)とは、データの分布や確率変数の分布がその平均値からどの程度離れているかの「ひずみ」を表す指標で、 正、負、もしくは0の値を取ることができます。
負の歪: 分布が右に集中しており、左に長いしっぽを持ちます。
正の歪: 分布が左に集中しており、右に長いしっぽを持ちます。
中心傾向の測定値の変化を以下に示します。
データの分布はしばしば歪んでおり、データ処理を行う際これがしばしば問題になります。 歪んだ分布は、その対数(log)をとることで対称な分布に変換できる可能性があります。
ANOVA は Analysis of Variance(分散分析) を意味します。
データ分布をグループ間で比較するために使用されます。
しばしば我々は大量のデータを扱います。扱いきれないほど大量であることもあります。その合計データは__母集団__と呼ばれます。
そういったデータを扱うために、データの中からランダムに一部のデータをピックアップして扱うことがあります。これらは__サンプル__と呼ばれます。
ANOVAはそうしたグループ、もしくはサンプルの分散を比較するために用いられます。
グループの分散は次のように与えられます。
集められたサンプル群の差はグループの平均値の差を用いて観測されます。平均値を比較するために__t検定__がしばしば用いられ、またサンプルが同じ母集団に属するかどうかをチェックするためにもこれは用いられます。
さて、t検定は2つのグループを対象として利用可能ですが、しばしばもっと多くのグループやサンプルを対象にすることもあるかと思います。
3つ以上のグループに対してt検定を行うときは、t検定をそれぞれのペアに対して複数回行う必要があります。このために、ANOVAが用いられます。
ANOVAには2つの要素があります。
1.それぞれのグループ内の変動
2.グループ間の変動
__F値__と呼ばれる比率の上で動作し、次のように表されます。
F値は合計の変動のうちどれくらいがグループ間の変動から来て、どれくらいがグループ内の変動から来るものなのかを表します。 もしほとんどの変動がグループ間から来る場合は、グループ間の平均値がより異なる可能性が高いでしょう。 しかし、もし変動がグループ内からくる場合は、対象の要素は全体グループとは異なるグループであると結論づけられるでしょう。 F値が大きいほど、グループはより異なる平均値を持つでしょう。
参考資料
Prob Den FnはProbability Density Function(確率密度関数)を意味します。
__確率理論において確率密度関数(PDF)もしくは確率変数密度とは、サンプル空間(確率変数が取る可能性のある値の集合)における任意のサンプル点におけるその値が、確率変数の値に等しいだろうという相対的な尤度を提供する関数__です。
連続する分布の確率密度関数(PDF) P(x)は(累積)分布関数D(x)の導関数として定義されます。
逆に、分布関数は特定の範囲の積分として与えられます。
まず2種類の曲線について知る必要があります。
分布曲線とは、分布上の値に、ある事例や母集団のサンプルが見つかる確率を表す曲線です。
正規分布
正規分布は、データがどのように分布しているかを表すものの一つです。分布内のデータサンプルのほとんどが平均値とその周辺に散らばっており、その他の少数が長い尾端に散らばっています。
正規分布において抑えておくべきポイントがいくつかあります。
-
曲線は常にベル型をしています。データのほとんどが平均値付近にあるため、平均値や中心値でサンプルが見つかる確率が高くなるためです。
-
対称な曲線であること
-
曲線の下の面積が常に1であること。これは、分布するすべての点が曲線の下に存在しなければならないからです。
-
正規分布では、平均値と中央値は分布の中で同じ線上にあること
標準正規分布
標準正規分布は、以下の条件を満たす正規分布のことです。
-
分布の平均値が0
-
分布の標準偏差が1
仮説検定の考え方は、このデータ分布に基づいて行われます。
仮説検定とは、実験データから統計的に正しい結論を下すための手法の1つです。 仮説検定は、母集団の特定のパラメータについて下す何らかの推定です。
たとえば、クラスの「男子の身長は女子の身長より高い」という仮説があったとします。
この陳述はクラスという母集団に関する仮定でしかありません。
__仮説__とは情報やデータのセットを観測した上で行われる仮定の命題や陳述に過ぎません。
我々はまず、母集団に関するサンプルデータを元に、2つの相互に排他的な仮定を行います。
1つ目は__帰無仮説(null仮説)__と呼ばれ、H0
で表されます。
2つ目は 対立仮説 と呼ばれ、H1
もしくはHa
で表されます。帰無仮説に対立するものとして用いられます。
母集団のデータに基づいて帰無仮説を受け入れるか否かを決定し、それに対応して対立仮説を否定するか受け入れるかを決めることになります。
有意水準とは、帰無仮説を受け入れるか否定するかを決定する上で考慮する程度を指します。母集団における仮説を考慮するとき、100%、つまり全ての例が仮説に従うということは(ほぼ)ありません。 そのため、__有意水準を裾切り(カットオフ)する程度__と定めます。例えば、有意水準5%というと、(100-5)% = 95%のデータが仮定に従えば仮説を受け入れる、という具合です。
__ 95%の信頼度で仮説を受け入れる __、と表現されます。
棄却されない領域は、採択域またはβ領域 と呼ばれます。棄却領域は__危険域またはα領域__と呼ばれます。α領域は、有意水準 を表しています。
有意水準を5%とすると、2つのα領域には母集団の(2.5+2.5)%があり、β領域には95%が存在することになります。
採択と棄却には2種類の誤りが生じます。
Type-I Error:__ NULL 仮説は真であるが、誤って棄却された場合。
Type-II Error:__ NULL 仮説が偽であるにもかかわらず,誤って受け入れてしまった場合。
片側検定:
仮説検定の一つで、棄却領域がサンプリングの分布の片方側にしかないものを言います。棄却領域は左右どちら側でも構いません。
考え方としては、有意水準を5%とし、「クラスの男子の身長は6フィート未満」という仮説を考えてみます。母集団の5%が6フィート以上であれば、その仮説は正しいと考えます。つまり、検定条件が片側の尾端(身長が6フィート以上の尾端)だけを制限するので、これは片側検定と言えます。
両側検定は、棄却領域がデータ分布の両端にある場合です。
考え方としては、有意水準を5%とし、「あるクラスの男子の身長は6フィートではない」という仮説を考えたとします。
ここでは,母集団の5%以上が6フィート未満またはそれより上であれば,NULL仮説を受け入れることができます。つまり棄却領域は両端にあり、その領域は分布の両端で5% / 2 = 2.5%であることがわかります。
P値について説明する前に、Z検定というもう一つの重要な概念についてまず説明する必要があるでしょう。
__母集団__と__標本(サンプル)__という2つの言葉を知る必要があります。
__母集団__とは、利用可能な分布データ全体を表します。つまり、提供されているデータセットのレコード全体を指します。
__標本(サンプル)__とは母集団もしくは特定の分布から無作為に抽出されたデータ点のグループを指します。 標本のサイズはデータ点から任意の数値を選ぶことができ、__標本数(サンプルサイズ)__と呼ばれます。
__Z検定__は特定の標本分布が特定の母集団に属するかどうかを決定づけるために用いられます。
さて、Z検定を行うにあたり、標準化された比較方法として__標準正規分布__を用いる必要があります。
これまで説明した通り、標準正規形とは、平均値=0、標準偏差=1の正規形のことです。
また 標準偏差 は平均からどれだけ点が離れているかを示す指標を表します。
これは、データの約68%、95%、99.7%が、それぞれ正規分布の1、2、3の標準偏差内に収まっているというものです。
さて、正規分布を標準正規分布に変換するには、Z値(Z-score)と呼ばれる標準スコアが必要です。それは次のように与えられます。
x = 標準化したい値
µ = x の分布の平均値
σ = xの分布の標準偏差
もう一つの概念 中央極限定理 についても知っておく必要があります。
中心極限定理は、サンプルサイズが30より大きいとき、母集団の分布に関わらず、サンプル平均の分布の平均は母集団の平均に等しいことを示します。
そして、 サンプル平均の分布は、正規分布に従います。
つまり、サンプルサイズが30以上の分布からいくつかのサンプルを選び、その中から静的なサンプルの平均を選び、それらを使って分布を作成すると、新しく作成されたサンプリング平均の分布の平均は、元の母集団の平均と等しくなるということです。
定理により、母平均μ、母標準偏差σの母集団から、大きさNのサンプルを抽出すると、次のことが成り立ちます。
つまり,サンプル平均の分布の平均値は,サンプル平均と等しいのです。
サンプル平均値の標準偏差は次のように与えられます。
上記の項は、標準誤差とも呼ばれます。
上述の理論をZ検定に利用します。標本の平均値が母集団の平均値に近ければ、その標本は母集団に属していると言えて、母平均から離れている場合は、そのサンプルは別の集団から採取されたものであると言えます。
これを行うには、数式を使用して、z統計量が1.96より大きいか小さいかを確認します(両側検定、有意水準 = 5%とする)。
上の式は、Z統計量を与えます。
z = Z統計量
X̄ = サンプル平均
μ = 母集団の平均
σ = 母集団の標準偏差
n = サンプルサイズ
Zスコアは分布の標準化に使われるので、データが全体的にどのように分布しているかを知ることができます。
定めた有意水準に基づいて、結果が統計的に有意であるかどうかを確認するために使用されます。
例えば、ある実験を行い、結果やデータを収集したとします。 ここで、第一の仮説(NULL仮説、帰無仮説)と、それに反する第二の仮説(対立仮説)を立てます。
そして、帰無仮説のしきい値となる有意水準を決めます。P値は、仮説の起きる確率を表しています。例えば対立仮説のP値が0.02の場合、対立仮説が起こる確率が2%であることを意味します。
さて、2%のp値や0.02のp値を許容できるかどうかは、有意水準にかかっています。これは、帰無仮説を支持するレベルと言えます。両側検定を用いて有意水準が5%の場合、分布の両端で2.5%を許容できるなら、有意水準>対立仮説のp値として、NULL仮説を受け入れます。
しかし、p値が有意水準より大きければ、その結果は 統計的に有意であるとし、NULL仮説を棄却します 。
参考資料:
3.https://medium.com/analytics-vidhya/z-test-demystified-f745c57c324c
カイ(χ)二乗検定は、データサイエンスや機械学習の問題で、特徴量の選択のために広く使われているものです。
カイ二乗検定は、統計学において2つの事象の独立性を検定するために用いられており、つまり使用する特徴量の独立性を確認するために使用されます。 しばしば、多くの情報を伝えないが、特徴空間に次元を追加するばかりの依存する特徴量が使用されてしまっているのです。
この検定は、2つ以上のカテゴリー変数の関係を調べる最も一般的な方法の1つです。
カイ二乗統計量 - χ2と呼ばれる数値が「期待値と観測値の差の合計を観測値で割った値」として与えられ、これはカイ二乗分布に従います。
参考資料:
統計において、カーネル密度推定(kernel density estimation, KDE) は確率変数の確率密度関数を推定するノンパラメトリックな方法を指します。 カーネル密度推定は、有限のデータサンプルに基づいて母集団に関する推論を行う基本的なデータの平滑化の問題です。
カーネル密度推定は、確率分布を表すもう一つの方法ととらえることもできます。
主に3つのカーネル関数が使われます。
-
ガウシアン
-
矩形
-
三角形
カーネル関数は、データポイントが見つかる確率を表しています。 つまり、中心部で最も高く、点から離れるにつれて低くなります。
全てのデータポイントにカーネル関数を割り当て、最終的に関数の密度を計算し、分割されたデータポイントの密度推定値を得ることができます。実際には、特定軸の特定の点におけるカーネル関数の値を加算します。 以下のように示されます。
カーネル関数は以下のように与えられます。
ここで、Kはカーネル(非負の関数)、h>0はバンド幅と言われる平滑化のパラメータです。
'h' (バンド幅)は曲線を変化させるパラメータです。
標準正規分布から100点の無作為に抽出したサンプルのバンド幅を様々に変更した際のカーネル密度関数(KDE)です。
灰色:が標準正規分布における真の密度,
赤色:h=0.05
黒色: h=0.337
緑色: h=2
参考資料:
回帰とは、 独立した変数 のセットから 依存した変数 の値を予測するものです。
例えば、自動車の価格を予測したいとします。車の価格を従属変数Yとし、エンジン容量、最高速度、クラス、会社などの特徴量を独立変数とします。 これらの変数を使って価格を得るための方程式を組みます。
たとえばyがxという特徴量に線形に依存するとき、mを係数、cを切片またはバイアスとして y=mx+c と表現することができます。
下記が回帰の種類を表しています。
データセットがどれだけ散らばっているか、広がっているかの指標を分散と呼びます。分散が0であると、それはすなわち全てのデータセットが同じ値であることを意味します。分散が「小さい」というとき、データ間の差が少ないことを意味します。逆に分散が「大きい」とき、データセットのデータは大きく異なることを意味します。
数学的には、データセット内の各値が平均値からどれだけ離れているかを表します。
分散(Σ^2)は各データ点の平均からの距離の2乗をデータ点の数を割った値で表されます。
共分散は、2つの確率変数の間の関連性の度合いをはかる概念です。確率変数は分布を作ることが知られています。分布は変数が取りうるデータ点の値の集合で、これはベクトル空間において簡単にベクトルで表すことができます。
共分散は2つのベクトルのドット積として定義されます。共分散の値は、+∞〜-∞まで変化します。2つの分布、もしくはベクトルが同じ方向に伸びる場合、共分散は正であり、逆方向に伸びる場合は共分散は負の値になります。符号は変動の方向を示し、大きさは変動の量を示すということです。
共分散は下記のように与えられます。
ここで,X_iとY_iは2つの分布のi番目の点を表し,X-barとY-barは両方の分布の平均値を表し,nは分布のデータポイントの数を表します。
「共分散」は、変数の総合的な関係性を方向・大きさの両方で測定するものです。「相関」は、共分散を尺度化したものです。これは無次元の値で、単位に依存しません。両変数の関連の強さを示すだけです。
数学的には、分布をベクトルで表現すると、相関はベクトル間の余弦(コサイン)となります。相関の値は、+1から-1まで変化します。+1は強い正の相関、-1は強い負の相関と言われています。0は無相関、つまり2つの変数が互いに独立であることを意味します。
相関は次のように与えられます。
ここで、
ρ(X,Y) – 変数Xと変数Yの相関
Cov(X,Y) – 変数Xと変数Yの間の共分散
σX – 変数Xの標準偏差
σY – 変数Yの標準偏差
標準偏差は分散の平方根で与えられます。
ユークリッド距離は、2点間の距離を測るのに最もよく使われている標準的な単位でm2つの点の座標値の差の二乗和の平方根として与えられます。
ユークリッド距離は、2つの点の座標値の差の二乗和の平方根として与えられます。
ユークリッド空間における2点間のユークリッド距離は、2点間の線分の長さを表す数値です。点のデカルト座標からピタゴラスの定理(三平方の定理)を用いて計算でき、ピタゴラス距離と呼ばれることもあります。
ユークリッド平面上で、点pを直交座標(p{1},p{2})、点qを座標(q_{1},q_{2})とします。このとき、pとqの間の距離は次のようになります。
Pythonは高レベルなプログラミング言語の1つで、データサイエンスを含む様々なプロジェクトに用いられています。
Python で使える膨大な量のライブラリが既に存在し、素早く何かを実装するのに適しています。
多くの情報システムがPythonをサポートしており、特に何かをインストールしなくても使用可能な場合がほとんどです。
- .pyファイルをコンピュータにダウンロードします
- Make it executable (chmod +x file.py on Linux)
- (chmod +x file.py コマンドをlinuxで実行するなどして)ファイルを実行可能にします
- Terminalアプリを開き、pythonファイルが存在するディレクトリに移動します
- python file.py でファイルを実行します
Rは、統計や数学的な可視化に特化したプログラミング言語です。
Terminalを使って手動でスクリプトを作成したり,Rコンソールで直接操作したりすることができます。
sudo apt-get install r-base
sudo apt-get install r-base-dev
Download the .exe setup available on CRAN のウェブサイトからセットアップ用の.exeをダウンロードしてください。
RstudioはRのための視覚的インタフェースです。無料でtheir websiteから利用することができます。
R studioは4つの主なエリアに分かれています。
- 左上は作業中のスクリプトです(実行したいコードをハイライトして Ctrl + Enter を押して実行してください)。
- 左下は、コードの一部の行を即時実行するためのコンソールです。
- 右上は、あなたの環境(変数、履歴など)を表示しています。
- 右下は、あなたがプロットした図、パッケージ、ヘルプ、コード実行の結果などを表示しています。
Rは、統計計算とグラフィックスのためのオープンソースのプログラミング言語およびソフトウェア環境であり、R Foundation for Statistical Computingによってサポートされています。
R言語は、統計ソフトの開発やデータ分析のために、統計学者やデータマイナーの間で広く使用されています。
データマイナーへのアンケート、学術文献データベースの調査などによると、Rの人気は近年大幅に上昇しています。
CSVはデータサイエンスで一般に用いられる__表データ__の形式です。構造化されたデータのほとんどはこの形式になります。 CSVファイルをPythonで開くときは、下記のように他のファイルと同様に開くことができます。
raw_file = open('file.csv', 'r')
- 'r': 読み込み(Reading), ファイルに変更を加えることはできません。
- 'w': 書き込み(Writing), 変更を加えれば元のファイルは消去されます。
- 'a': 追記(Adding), 変更はファイルの末尾に加えられます。
ほとんどの場合、1行ずつ読み込んで、その行に何らかの操作を行うことになるでしょう。後で使いたい場合は、リストや辞書型にデータを保存しておくことになります。
そのように1行ずつCSVファイルを読み込みたい場合は、下記のライブラリを使うことができます。
関数は、冗長な操作を実行する際に役立ちます。
まず、下記のように関数を定義しましょう。
def MyFunction(number):
"""この関数は数字に9を掛けて返却します。"""
number = number * 9
return number
Pythonには、Python2とPython3という大きく2つのディストリビューションがあります。
PipはPython用のライブラリマネージャです。pipを使うとほとんどのパッケージをたった1行のコマンドで簡単にインストールできるようになります。 pipをインストールするには下記のようにしてください。
# __python2__
sudo apt-get install python-pip
# __python3__
sudo apt-get install python3-pip
pipを使ったライブラリのインストールはターミナルなどで下記のように行うことができます。
# __python2__
sudo pip install [PCKG_NAME]
# __python3__
sudo pip3 install [PCKG_NAME]
coreから直接パッケージをインストールすることもできます。(詳しくは21_install_pkgs.pyを参照してください)
機械学習は人工知能の研究の一部です。古典的なアルゴリズムでは解くことがほぼ不可能な困難な課題を、 コンピュータを用いて解決するための洗練された実装を作ることを目的としています。
機械学習は主に3つのアルゴリズム群からできています。
- コンピュータ・ビジョン
- 検索エンジン
- 財務分析
- 文書の分類
- 音楽生成
- ロボティクス など
数値変数は、連続する整数や実数をとることができる変数です。無限の値をとりうることができます。
このタイプの変数は何らかの計測結果である特徴量のために使われます。例えば、クラスの生徒全員の身長、のようなものです。
カテゴリ変数は、有限の離散値をとる変数です。データ項目を分類するために、固定された値の集合をとります。
それらは、割り当てられたラベルのように動作します。 例えば 性別に応じてクラスの学生をラベリングするときは '男性'と'女性'を取りうるカテゴリ変数を作るでしょう。
ラベル付けされた学習データ から、推測を行う実装を作る機械学習のことを教師付き学習と呼びます。
訓練データは、標本のセットで構成されています。
教師付き学習では、各訓練データは、入力オブジェクト(通常はベクトルデータ)と望ましい出力値(教師信号とも呼ばれる)からなるペアです。
教師付き学習アルゴリズムは、学習データを分析して、新しいデータが入ってきたときにその望ましい出力値にマッピングするための推論関数を生成します。
別の言い方で表現してみましょう。
教師付き学習では、ラベル付きのデータセットから学習します。教師付き学習モデルは、標本とラベルから、標本を記述するために使用される特徴量の相関関係を見つけ、各特徴量が標本に対応するラベルにどのように寄与するかを学習しようとします。見たことのないデータを受け取ったときに、教師付き学習の目標は、その特徴量に基づいて正しくラベルを付けることです。
正しいシナリオがあれば、アルゴリズムは初見のデータのラベルを正しく決定することができます。
教師なし機械学習とは、__"ラベルなし" のデータ__から、隠れた構造を見つけ出すための関数を推論する機械学習です。(分類やカテゴライズが観測データに含まれていません)。
学習器に与えられた例はラベル付けされていない(望ましい結果が何か分からない)ので、関連するアルゴリズムによって出力された構造の正確さを評価することができません。これが、教師付き学習や強化学習と教師なし学習との違いです。
教師なし学習では、データ標本のみを扱います。特徴量の類似性に基づいてデータをグループ化し、クラスターを形成しようと試みます。2つの標本が類似した特徴を持ち、特徴空間内で近接して配置される場合、2つのインスタンスが同じクラスタに属する可能性が高くなります。初見のデータを取得すると、アルゴリズムは、その特徴に基づいて、標本がどのクラスタに属するべきかを見つけようと試みるのです。
参考資料:
機械学習の問題は、データセットの特徴量を入力として取り込みます。
教師付き学習では、モデルが訓練データを用いて訓練を行って初めて利用可能な状態になります。そのため、教師付き学習ではモデルに学習させるために、特徴量とは別に各データ点に対応するラベルをあらかじめ入力する必要があります。
一方、教師なし学習では、モデルはデータ項目間の関係を用いてグループ化するだけで実行されます。そのため教師なし学習では、ラベル付きのデータセットは必要ありません。データセットの特徴量だけが入力となります。
あるデータセットを使って教師付き機械学習モデルを学習すると、モデルはその特定のデータセットの依存性を非常に深く捉えます。そのため、モデルは常にデータ上で良い性能を発揮しますが、モデルの性能を正しく測ることはできません。
モデルの性能を知るためには、異なるデータセットでモデルを訓練し、テストする必要があります。モデルを訓練するデータセットを「トレーニングセット」、モデルをテストするデータセットを「テストセット」と呼びます。
通常、提供されたデータセットを分割して、トレーニングセットとテストセットを作成します。分割の比率はデータによって3:7または2:8といった程度で、大きい方が訓練データとして使われることが多いです。
文法:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
分類は最も重要で一般的な機械学習の問題です。分類問題には、教師ありの問題と教師なしの問題があります。
分類問題では、特定のデータポイントに対応する特徴セットに基づいて、データポイントを特定のクラスに属するようにラベル付けすることを行います。このために、深層学習を含む機械学習技術を用いて実行することができます。
分類にはロジスティック回帰、SVM、分類木といった種類があり、分類を行うための機械学習モデルは分類器(classifier)と呼ばれます。
機械学習モデルが特定の問題に対して生成する出力を「予測(prediction)」といいます。
予測には、大きく分けて2種類の問題に対応するものがあります。
-
分類
-
回帰
分類では、ほとんどの場合データポイントが属するクラスまたはラベルを予測します。
回帰では、予測値は連続的な数値です。例えば、家の価格を予測する場合などです。
多くの場合、モデルを訓練しすぎたり、モデルを複雑にしすぎたりして、モデルが訓練データに適合しすぎてしまうことがあります。
訓練データには、外れ値が含まれていたり、データの誤解を招くようなパターンが含まれていることもよくあります。このような不規則性を持つ訓練データを深くモデルにフィットさせると、モデルの汎化能力が失われてしまいます。このモデルは、訓練セットでは非常に良い性能を発揮しますが、テストセットではそれほど良い性能を出しえません。
ある点を超えて訓練すると,訓練における誤差が減少し、テストでの誤差は増加することがわかります。
訓練データ上ではh1よりも多くの誤差を与え、テストデータ上ではh1よりも少ない誤差しか与えない別の仮説hが存在するとき、仮説h1は「過学習している」と言われます。
バイアスとは、モデルの予測値の平均と、予測しようとしている正しい値との差のことです。バイアスの高いモデルは、トレーニングデータにほとんど注意を払っておらず、モデルを単純化しすぎています。そのため、訓練データやテストデータで高い誤差が生じます。
分散とは、あるデータポイントに対するモデル予測のばらつき、またはデータの広がりを示す値です。分散が大きいモデルは、トレーニングデータに多くの注意を払っており、初めて見るデータに対しては一般化しません。その結果、訓練データでは非常に良い性能を発揮しますが、テストデータでは高い誤差となります。
基本的に分散が大きいとオーバーフィッティング(過学習)になり、偏りが大きいとアンダーフィッティング(学習不足)になりがちです。モデルが完璧に機能するためには、バイアスと分散が低いことが望まれ、高分散で高バイアスのモデルは避ける必要があります。
低バイアス、低分散の場合、我々のモデルは全てのデータポイントを精確に予測していることがわかります。最後の画像では、高バイアスと高分散の場合、モデルはどのデータポイントも精確に予測できていないことが分かります。
このグラフから、複雑すぎるモデルや単純すぎるモデルでは、誤差が大きくなることがわかります。偏り(バイアス)はモデルが単純なほど大きくなり、分散はモデルが複雑なほど大きくなります。
これは、機械学習において最も重要なトレードオフの一つです。
ここまで、分類についてお話しました。最も使用されている手法は、ロジスティック回帰、SVM、決定木であることがわかりました。クラスの境界が線形な場合はロジスティック回帰やSVMなどの手法が最も適していますが、境界が非直線的な場合は、決定木がよく使用されます。
最初の画像は線形な境界、2番目の画像は非線形な境界を示しています。
非線形な境界のとき、決定木ベースのアプローチは、分類に非常に有効です。このアルゴリズムは、決定を導くための条件をベースにしているので、関数に依存しません。
決定木による分類のアプローチ
決定木(Decision Trees)は、機械学習アルゴリズムの中でも最も利用されているものの一つで、分類と回帰のどちらにも使用されます。線形データと非線形データの両方に使用することができますが、主に非線形データに使用されます。決定木はその名が示すように、データとその挙動から導き出された一連の判断を行います。線形分類器や回帰を使用しないため、その性能はデータの線形性には依存しません。
木モデルを使用する他の最も重要な理由の1つは、解釈が非常に容易であることです。
決定木は、分類と回帰の両方に同じ原理で使用することができますが、やり方は少し異なります。CARTアルゴリズム(Classification and Regression Trees)を使用します。
参考資料:
複数のモデルや弱い学習者を組み合わせることで、機械学習モデルの性能、有効性を向上させるための手法です。
アンサンブル学習には2種類のタイプがあります。
1. 並列アンサンブル学習法またはバギング法_。
2. 逐次アンサンブル学習法(ブースティング法)。
並列/バギング法では,複数の弱い分類器が並行して作成されます。また、学習データセットは元のデータセットからブートストラップベースでランダムに作成されます。学習段階と作成段階で使用されるデータセットは弱い分類器です。その後、予測の際にはすべての分類器からの結果がバギングされ、最終的な結果を得るために用いられます。
Ex: ランダムフォレスト
追加学習やブースティングにおいて、弱い識別機が次から次に作られます。 作る仮定では、 前の識別機が誤った推測に次の識別機がフォーカスするようにサンプルのデータセットが重み付けされていきます。 そうやって、各ステップにおいて分類器は前回の誤りや誤分類を使って改善・学習を行うのです。
ブースティングのアルゴリズムには主に3つの種類があります。
1. Adaboost(アダブースト)
2. Gradient Boosting(勾配ブースティング)
3. XGBoost(eXtreme Gradient Boosting, XGブースティング)
アダブースト は以下のように動作します。 まず弱い識別機(スタンプと呼ばれます)と作り、これは完成した決定木ではなく分類が終わったことに基づいた単一ノードを含みます。 誤分類が観測されると、スタンプは次の弱学習器を学習させる際に正しく分類されたものよりも重み付けされるのです。
実際のデータを分類するアプリケーションをpythonで作る際には、sklearn.ensemble.AdaBoostClassifier が使えます。
参考資料:
勾配ブースティング アルゴリズムは 出力が0.5となるノードからはじめ、分類と回帰を行います。そのノードが最初のスタンプ/弱分類器として働きます。 そして、予測の誤差を見て他の学習器や決定木を作成し、条件に基づいて実際に誤差を予測します。この誤差を「残差」と呼びます。最終的な出力は以下のようになります。
0.5 (最初の学習器からの出力) + 2番目のツリーまたは学習者が提供した誤差
さて、この方法を使うと、予測値をきっちり学習しすぎてしまい、汎化性が失われてしまいます。それを避けるために、勾配ブースティングでは、学習パラメータ_α_を使用します。
さて、2つの学習器を使った最終的な結果は次のように得られます。
0.5 (最初の学習器からの出力) + alpha X (2番目のツリーまたは学習器からの出力誤差)__。
追加された部分を使用することで、正しい結果に向けて少しずつ進歩していることがわかります。その後も学習器を追加していき、訓練セットから得られる実際の値に近くなるまで続けます。
全体として、この式は次のようになります。
0.5 (最初の学習器からの出力)+ α X (2番目のツリーまたは学習器からの出力誤差)+ α X (3番目のツリーまたは学習器からの出力誤差)+............._
勾配ブースティングをpythonで行う際は、 sklearn.ensemble.GradientBoostingClassifier を使うことができます。
参考資料:
単純ベイズ(ナイーブベイズ, Naive Bayes)は、ベイズ理論 を基礎とした一連の分類アルゴリズムです。
ベイズ理論は事象の起きる確率を、事象に関連する条件の事前知識を元に表現したものであり、下記のように表されます。
ここで P(A|B)
はBが既に起きたと知っている状態におけるAが起きる確率で、P(B|A)
はAが既に起きたと知っている状態におけるBが起きる確率を指します。
ナイーブベイズには主に2つのタイプがあります。
1. ガウシアンナイーブベイズ(Gaussian Naive Bayes)
2. 多項分布ナイーブベイズ(Multinomial Naive Bayes)
この手法は主に書類の分類に用いられます。 例えば、ある記事がスポーツに関するものか映画雑誌に関するものか、といった分類です。 メールがスパムかどうかを判別することにも使われたりします。決定を行うために、異なる雑誌の単語の出現頻度のデータを使用しているのです。
例えば、"Dear" "friends"といった言葉がメールではよく使われるのに対し、スパムメールでは"offer" "money"といった言葉が多く使われる傾向にあるといったことです。
そのようにして、登場する単語を使ってメールがスパムである確率を計算するのです。
予測変数が連続的な値を取り、離散的でない場合、これらの値はガウス分布(=正規分布)からサンプリングされていると仮定します。
そうやって、正規分布とベイズ理論をリンクさせます。
参考資料:
K-nearest neighbourアルゴリズムは、最も基本的であり、今日でも不可欠なアルゴリズムです。モデルベースではなく、メモリーベースのアプローチです。
KNNは、教師付き学習と教師なし学習の両方で使用されます。このアルゴリズムは、単純に特徴空間内のデータポイントの位置を特定し、「距離」を類似性の指標として使用します。特徴空間中でテストデータに最も似ているデータを探すアルゴリズムです。
2つのデータポイント間の距離が小さいほど、そのポイントはより類似しているとみなされます。
K近傍アルゴリズムでは、分類したい点を特徴空間上にプロットし、最も近いK個の近傍クラスに分類します。Kはユーザーから入力されるパラメータで、当該点のラベルを決定する際に、何点を用いるかという指標です。Kが1より大きい値のとき、多数派のラベルを特定するということです。
データセットが非常に大きい場合には、大きなKを使用して境界を生成することができます。データセットが小さい場合は、もちろん小さなKの値を使用しなければいけません。
参考資料:
「回帰」は機械学習において最も重要なコンセプトの1つです。
ロジスティクス回帰は最も使用されている分類アルゴリズムで、データポイントを線形に分離するために用いられます。また、このアルゴリズムは従属変数が分類分けされている場合に使用されます。
下記の線形回帰方程式を用います。
Y= w1x1+w2x2+w3x3……..wkxk
下記のようにも表せます。
Y= 1/ 1+e^-(w1x1+w2x2+w3x3……..wkxk)
下記のように表せば、値が0から1の間に収まることを保証でき、分類アルゴリズムとして使いやすくなります。
上記の方程式は シグモイド(Sigmoid) 関数と呼ばれ、 下記のようになります。
そして、この損失関数はLog損失(Log Loss)もしくは二値分類用の交差エントロピー(binary cross-entropy)と呼ばれます。
Loss= —Y_actual. log(h(x)) —(1 — Y_actual.log(1 — h(x)))
Y_actual=1のとき1つ目の部分が誤差を出し、そうでないときは2つ目が誤差を出します。
ロジスティック回帰はマルチクラス分類にも使われます。ソフトマックス回帰またはOne vs All ロジスティック回帰を使用します。
pythonでロジスティクス回帰を使用するときは、 sklearn.linear_model.LogisticRegression を使うことができます。
回帰タスクは、一連の独立変数(提供された機能)から従属変数の値を予測するものです。例えば、自動車の価格を予測したいとします。そこで、Yという従属変数となり、エンジン容量、最高速度、クラス、会社などの特徴が独立変数となり、価格を求める方程式を組み立てるのに役立ちます。
従属変数Yがxに線形に依存している場合、y=mx+cで与えられます。MとCはともにモデルのパラメータです。
ここでは、平均二乗誤差(Mean Square Error, MSE)という損失関数またはコスト関数を使用します。これは、実際の値と予測値の差の二乗で与えられます。
MSE=1/2m * (Y_actual — Y_pred)²
この関数をよく見ると、放物線を描いていることがわかります。この関数は凸関数です。この凸関数は、勾配降下法でモデルパラメータの値を得るために使用される原理です。
上の画像は損失関数の様子を示しています。
モデルパラメータの精確な予測値を得るために、 勾配降下法 を用います。
pythonで線形回帰を行いたいときは、 sklearn.linear_model.LinearRegression を使用することができます。
パーセプトロンは1950年代に表現された最初のモデルでした。
これは 二項分類 、つまり2つ以上のグループを分離することはできず、これらのグループは 線形分離可能 でなければなりません。
パーセプトロンは 生物のニューロンのように機能 します。活性化値を計算し、この値が正であれば1を、そうでなければ0を返します。
階層型アルゴリズムは、ツリー状の構造を作成してクラスタを作成することからそう呼ばれています。また、これらのアルゴリズムは、クラスター作成に距離ベースのアプローチを用いています。
最も一般的なアルゴリズムとして、下記のものが知られています。
凝集型階層クラスタリング(Agglomerative Hierarchical clustering)
分裂型階層クラスター法(Divisive Hierarchical clustering)
凝集型階層クラスタリング(Agglomerative Hierarchical clustering) :このタイプの階層的クラスタリングでは、各点がクラスターとして始まり、徐々に最も近いまたは類似したクラスターが結合して1つのクラスターになっていきます。
_分裂型階層クラスター法(Divisive Hierarchical Clustering)__: このタイプの階層型クラスタリングは、Agglomerative clusteringの反対の動きをします。すべての点がはじめ1つの大きなクラスタとしてスタートし、2つのクラスタ間の距離の大きさや類似性の低さに基づいて、徐々に小さなクラスタに分割されていきます。すべての点が個々のクラスターになるまで、クラスターを分割し続けます。
凝集型クラスタリングでは、1つのクラスタに最も近い、または類似度の高いクラスタを結合していきます。そこで、結合のためのカットオフまたは閾値を定義すると、単一のクラスターではなく、複数のクラスターを得ることができます。例えば、閾値となる類似性メトリクスのスコアを0.5とすると、類似性スコアが0.5未満のクラスタが2つとも見つからなかった場合、アルゴリズムはクラスタのマージを停止し、その段階で存在するクラスタの数が、作成する必要のある最終的なクラスタ数となることを意味します。
同様に、分割型クラスタリングでは最小の類似性スコアに基づいてクラスターを分割します。つまり、0.5という類似性スコアを定義すると、2つのクラスター間の類似性スコアが0.5以下の場合、分割や分割を停止します。クラスタの数として残り、全てのデータ点ごとに分解されるわけではありません。
そのプロセスは下記のように表されます。
距離を測り、カットオフを適用する方法としてデンドログラム法がよく使われます。
上記のクラスタリングのデンドグラムは以下のようになります。
このアルゴリズムは、最初にN個のデータポイントを使ってランダムにK個のクラスターを作成し、各クラスターについてクラスター内の全ポイントの平均値を求めます。つまり、各クラスターについて、クラスターの中心点(またはセントロイド)を見つけるのです。次に、各クラスタの二乗誤差の合計(Sum of Squared Error, SSE)を計算します。SSEはクラスターの品質を測定するために使用されます。クラスタの点と中心の間の距離が大きければ、SSEは高くなり、より近辺の点だけをクラスタ内の点として認識していることになります。
このアルゴリズムは、クラスターの中心に近い位置にある点は、そのクラスターに含まれるべきだという原則に基づいて動作します。つまり、ある点xがクラスタBよりもクラスタAの中心に近ければ、xはクラスタAに属することになります。このようにして、ある点がクラスタに入り、1つの点でもクラスタから別のクラスタに移動すると、セントロイドが変化し、SSEも変化します。SSEが減少し、セントロイドが変化しなくなるまでこの作業を続けます。ある程度の試行回数を重ねると、最適なクラスタが見つかり、セントロイドが変化しなくなるので試行を停止します。
初期のクラスター数'K'は、ユーザーからもらうパラメータです。
下記の画像はこのアルゴリズムの様子を示しています。
この種のクラスタリング手法では、作成されるクラスタの数を定義する、ユーザー入力パラメータ「K」が必要です。これは非常に重要なパラメータです。 このパラメータを求めるために、いくつかの方法が用いられています。最も重要で最もよく使用される方法は、エルボー法です。小さいデータセットの場合、k=(N/2)^(1/2)、つまり分布のポイント数の半分の平方根を使用するというものです。
ニューラルネットワークは、相互に接続された人工的なニューロン(ノード)の層の集合体で、人間の脳の構造と働きを念頭に置いてモデル化された概念です。ニューラルネットワークは、データセットを用いて学習させることができる予測のモデル作成の用途で作られています。自己学習アルゴリズムに基づいており、学習した情報セットから得られる結論や複雑な関係に基づいて予測を行います。
一般的なニューラルネットワークは、複数の層(レイヤー)から構成されています。最初の層は「入力層」、最後の層は「出力層」と呼ばれます。また、入力層と出力層の間にある層を「隠れ層」と呼びます。基本的には、予測と分類を行うためのブラックボックスな層として機能します。すべての層は相互に接続されており、ノードと呼ばれる多数の人工ニューロンで構成されています。
ニューラルネットワークはあまりに複雑で最急降下法では動作せず、誤差逆伝播法(Backproapagations)と最適化手法(オプティマイザー、Optimizer)という別の仕組みで動きます。
テキストの分類とセンチメント(感情)分析は、非常に一般的な機械学習の問題であり、製品の予測や映画の推薦など、多くのアプリケーションに利用されています。
センチメント分析のようなテキスト分類問題は、アルゴリズムを用いて様々な方法で実現することができます。大きく分けて2つのカテゴリーがあります。
1つはbag of Word(単語の袋)モデル。データセット内のすべての文をトークン化して、語彙を示す単語の袋を形成します。データセットに含まれる個々の文やサンプルは、この単語の袋のベクトルで表されます。このベクトルを「特徴ベクトル」と呼びます。例えば、「It is a sunny day」(今日は晴れた日だ)と「The Sun rises in east」(太陽は東から昇る)という2つの文があるとします。単語の袋は、両方の文に含まれるすべての単語を表します。
2つ目の方法は、時系列な手法に基づいています。各単語を個別のベクトルで表します。つまり、一文はベクトル群のうちの1ベクトルとして表現されます。
NetflixやAmazon、Youtubeなどのサービスは誰もが利用したことがあるでしょう。これらのサービスでは、非常に高度なシステムを使って、ユーザーに最適なコンテンツを推薦し、ユーザー体験を素晴らしいものにしています。
推薦アルゴリズムには主に3つのコンポーネントがありますが、そのうちの1つが「候補者生成」(Candidate generation)です。この方法は、何千ものアイテムの巨大なプールが与えられたときに、ユーザーに推薦する候補の小さなサブセットを生成する役割を果たします。
候補者生成システムの種類には以下のようなものがあります。
コンテンツベースのフィルタリングシステム
協調型フィルタリングシステム
コンテンツ・ベース・フィルタリング・システム : コンテンツの特徴を与えられたユーザーの特徴や行動を推測し、ユーザーが肯定的に反応するものを推薦しようとします。
協調フィルタリング・システム : この手法では、コンテンツの特徴量が与えられる必要がありません。すべてのユーザーとコンテンツは、特徴ベクトル(または「埋め込み」)によって表現されます。
ユーザーとコンテンツの両方の「埋め込み」を自律的に作成し、ユーザーとコンテンツの両方を同じ空間に埋め込みます。
特定のユーザが好きなコンテンツや、自分と同じような行動や嗜好を持つユーザが好きなコンテンツを記録しておき、それを元にコンテンツを推薦するのです。
また、コンテンツに対するユーザーのフィードバックを収集し、それも推薦に利用します。
サポートベクタマシン(SVM)は分類と回帰の両方で使われます。
分類器、もしくは回帰のためにSVMはマージン(距離)を用います。このマージンによって、モデルとその性能をより頑強かつ精確なものにしていきます。
上のイメージはSVMは分類器を表現しています。赤線が実際の分類器で、点線が境界を表します。境界にいる点達が実際にマージン(距離)を決定することになります。 それらがその分類器のマージンを「サポート」するので、__サポートベクタ__と呼ばれています。
分類器と、最も近い点達の距離が__マージン距離__と呼ばれます。
ここでは複数の分類器を存在しうるのですが、マージン距離が最大となる分類器を選択します。 つまり、マージン距離とサポートベクターが最適な分類器を選ぶ手助けをしてくれるというわけです。
強化学習(Reinforcement Learning, RL)は、「ソフトウェアエージェントが累積報酬(cumulative reward)を最大化する行動を取らなければならない状況を考慮する 機械学習の一分野」です。
ゲームをプレイするとき私達はクリアするために複数の選択や予測を行っていますが、これは多重決定プロセスと呼ぶことができます。こういったものが、強化学習アルゴリズムを必要とする種類の状況です。アルゴリズムの分類分けは、多重決定プロセスをサポートさせる決定のチェインに基づいています。
強化アルゴリズムは、決断を下していくことで開始状態からゴールに到達するために用いられます。
強化学習は自発的に学習を行うエージェントを含んでおり、ゴールに近づく正しい決断を下した場合はポジティブな報酬を与えられ、そうでない場合は報酬が与えられません。 そのようにして、エージェントは学習を行います。
上記の画像は強化学習のセットアップの様子を表しています。
1行ずつ実行するために、.R
のスクリプトファイルは R studioで開きましょう。
インストール方法についてはこちらを参照してください。 10_ Toolbox/3_ R, Rstudio, Rattle
数学において、関数fのグラフとは全ての整列された(x, f(x))
の集合のことです。もし入力xがスカラー値なら、グラフは2次元になるでしょうし、それが連続関数なのであれば曲線になります。もし関数入力xが実数ペア(x1,x2)
であれば、グラフは(x1, x2, f(x1, x2))
の3つ組の集合になり、連続関数なのであればグラフは面になるでしょう。
「一変量」という用語は、統計学において、1つの変数の分布と、複数の変数の分布を区別するために使われますが、他の用途にも色々と使われます。 例えば、一変量データは単一のスカラー成分で構成されるデータを指し、そのスカラー成分が時系列のものであるとき、ある一つの量の時間的な値の集合を指すこともあります。
二変量解析は、最もシンプルな定量(統計)解析の1つです[1]。 2 つの変数 (X, Y と表記されることが多い) を分析して、それらの間の関係を明らかにすることを目的としています。
多変量解析(Multi-Variate Analysis, MVA)は、多変量の統計的原理に基づいており、一度に複数の統計的な結果変数を観察・分析するものです。デザインや分析の分野において、複数の次元からのトレーディングの研究を行う際に、対象となる結果に対して全ての変数の影響を考慮しながら行うための手法でもあります。
ggplot2は、Rのための作図機能で、graphicsの文法に基づいており、base graphicsとlattice graphicsの良い部分だけを抽出しようとしているものです。 作図を面倒にする多くの厄介な部分(凡例を描画するなど)を簡単にしてくれるだけでなく、強力なグラフィックスモデルを提供し、複雑で多層的なグラフィックスの作成を容易にします。
http://r4stats.com/examples/graphics-ggplot2/
頻度を可視化するための2種類のグラフとして、ヒストグラムとパイチャートが挙げられます。
ヒストグラムは、各分類クラスの頻度の分布を表し、これらの度数の分類間の分布を示し、パイは、100%を円形として、その中で各分類の相対的な割合を示すものです。
Treemaps は、階層構造(木構造)のあるデータを、入れ子状の長方形のセットとして表示するものです。ツリー(木)の各枝には長方形が与えられ、その長方形は小枝を表す小さな長方形でタイル状になっています.先端(リーフ)ノードの長方形は,データの特定の次元に比例した面積を持ちます。多くの場合、リーフノードは、データの別の次元を示すために色付けされます。
- 枝の個数が10以下のとき
- 正の値を扱うとき
- 可視化に使える空間の広さが限られているとき
このツリーマップでは、各製品ごとの割合を体積で表現しています。液体製品は他の製品よりも多く販売されていることが分かります。もっと詳しく知りたい場合は、「液体」の製品を調べて、どの棚が顧客に好まれているかを調べて図を細分化していくことができるでしょう。
散布図 (散布図、散布グラフ、scattergram、散布図とも呼ばれる) は、データセットの2つの変数の値を表示するための直交座標を使ったプロット方法の一つです。
散布図は、2つの変数の関係を示したい場合に使用します 。そのため相関図と呼ばれることもあります。
この散布図では、店舗の表面積と売上高(ユーロ)の間には正の相関があることを示しています。当前のことではありますが…。
折れ線グラフ (または線グラフ)は、「マーカー」と呼ばれる一連のデータ点を直線で結んで表示するグラフの一種です。折れ線グラフは、一定期間の時系列データの傾向を可視化するために使用されることが多いです。
- 時系列の変化を追いたいとき
- X軸に連続値を使いたいとき
- Y軸に測定結果を表示したいとき
上の図は、アイスクリームの1年間の売上高(k ユーロ)を表しているとします。このグラフによると、売上高は夏にピークを迎え、秋から冬にかけて減少することがはっきりとわかります。当たり前ではありますが。
D3.jsはjavascriptのライブラリで、非常に様々な形で簡単にデータを可視化する助けになってくれます。
D3.jsは、データに基づいてドキュメントを操作するためのJavaScriptライブラリです。
HTML、SVG、CSSを使ってデータを生き生きと表現する手助けをします。
ウェブ標準を重視しており、独自のフレームワークに縛られることなく、強力な可視化コンポーネントとDOM操作のデータドリブンな手法を組み合わせることで、最新のブラウザの機能をフルに発揮することができます。
D3's Github のページでD3.jsを用いた例をたくさん見ることができます。
ベン図 (プライマリー・ダイアグラム、セット・ダイアグラム、ロジック・ダイアグラムとも呼ばれる) とは、異なるセットの有限集合の間で、起こりうる全ての論理的関係を示す図です。
異なるグループ間の論理的関係(和、差、積)を示したいときです。
このようなベン図は、通常、小売業で使用されます。例えばチーズと赤ワインの人気度を調査する必要があるとし、2500人の顧客がアンケートに答えてくれたとします。 上の図を使うと、2500人の顧客のうち、900人(36%)がチーズを好み、1200人(48%)が赤ワインを好み、400人(16%)が両方を好きなことがひと目で分かります。
面グラフ (またはエリアグラフ)は、定量的なデータをグラフ化して表示します。折れ線グラフをベースにしており、軸と線の間の部分は、色や模様、平行線などで強調されることが一般的です。
時間の経過に伴う定量的な経過を示したり、比較したりするときです。
例えばこの積み上げ式面グラフは、各口座の金額の変化、合計金額への貢献度(金額ベース)を示しています。
Matplotlib Series 7: Area chart
レーダーチャート は、radiiと呼ばれる一連の等角度のスポークで構成されるチャートやプロットのことで、各スポークが1つの変数を表しています。スポークの長さは、全データポイントにおける変数の最大値に対する該当スポークの変数の値の大きさを表します。各スポークのデータ値を結ぶ線を描くことでプロットが星のように見えることが、このプロットの一般名の由来にもなっています。
- 様々な特徴量や特性について、2つ以上のアイテムやグループを比較したいとき
- 特定のデータポイントの相対的な値を調べたいとき
- 1つのレーダーチャートに表示する要素が10個以下のとき
このレーダーチャートは、4人中2人の顧客の好みを表示しています。顧客c1は、チキンとパンが好きで、チーズはあまり好きではありません。一方、顧客c2は、他の4つの商品よりもチーズを好みますが、ビールは好きではありません。この2人の顧客にインタビューをして、好みではない商品の弱点を探ることなどができるでしょう。
Word Cloud (タグクラウド、もしくは重み付けされたタグの視覚的記述)とは、テキストを可視化する新しい方法です。タグは1つの単語でできており、 各タグの重要度はフォントサイズもしくは色で表現されます。このフォーマットは最も重要な用語を素早く認識したり、 用語をアルファベット順に探して相対的な重要度を判断するのに便利です。
- ウェブサイトのmetadata(タグ)のキーワードを描写するとき
- 感情を与えたり感情移入させるとき
このWord Cloudによれば、データサイエンスは数学、統計学、情報科学、コンピュータサイエンスなど多くの技術や理論を用いていることがわかります。 またビジネスの分析に用いられており、「21世紀において最もセクシーな仕事」とも呼ばれているようです。
Matplotlib Series 9: Word cloud
TensorFlowは、データフローグラフを用いて数値計算を行うためのオープンソースソフトウェアライブラリです。
グラフのノードは数学的操作を表し、グラフのエッジはそれらの間でやり取りされる多次元データ配列(テンソル)を表しています。
この柔軟なアーキテクチャによって、デスクトップ、サーバ、携帯端末など複数のCPU/GPUといった計算資源に1つのAPIで分散させることができるようになっています。
TensorFlowは、もともとGoogleの機械知能研究組織「Google Brain Team」に所属する研究者やエンジニアが、機械学習やディープニューラルネットワークの研究を目的として開発したものですが、いまや他のさまざまな領域にも応用できる汎用性のあるシステムとなっています。
- CS 188 - Introduction to Artificial Intelligence, UC Berkeley - Spring 2015
- 6.034 Artificial Intelligence, MIT OCW
- CS221: Artificial Intelligence: Principles and Techniques - Autumn 2019 - Stanford University
- 15-780 - Graduate Artificial Intelligence, Spring 14, CMU
- CSE 592 Applications of Artificial Intelligence, Winter 2003 - University of Washington
- CS322 - Introduction to Artificial Intelligence, Winter 2012-13 - UBC (YouTube)
- CS 4804: Introduction to Artificial Intelligence, Fall 2016
- CS 5804: Introduction to Artificial Intelligence, Spring 2015
- Artificial Intelligence - IIT Kharagpur
- Artificial Intelligence - IIT Madras
- Artificial Intelligence(Prof.P.Dasgupta) - IIT Kharagpur
- MOOC - Intro to Artificial Intelligence - Udacity
- MOOC - Artificial Intelligence for Robotics - Udacity
- Graduate Course in Artificial Intelligence, Autumn 2012 - University of Washington
- Agent-Based Systems 2015/16- University of Edinburgh
- Informatics 2D - Reasoning and Agents 2014/15- University of Edinburgh
- Artificial Intelligence - Hochschule Ravensburg-Weingarten
- Deductive Databases and Knowledge-Based Systems - Technische Universität Braunschweig, Germany
- Artificial Intelligence: Knowledge Representation and Reasoning - IIT Madras
- Semantic Web Technologies by Dr. Harald Sack - HPI
- Knowledge Engineering with Semantic Web Technologies by Dr. Harald Sack - HPI
-
機械学習のイントロダクション
- MOOC Machine Learning Andrew Ng - Coursera/Stanford (Notes)
- Introduction to Machine Learning for Coders
- MOOC - Statistical Learning, Stanford University
- Foundations of Machine Learning Boot Camp, Berkeley Simons Institute
- CS155 - Machine Learning & Data Mining, 2017 - Caltech (Notes) (2016)
- CS 156 - Learning from Data, Caltech
- 10-601 - Introduction to Machine Learning (MS) - Tom Mitchell - 2015, CMU (YouTube)
- 10-601 Machine Learning | CMU | Fall 2017
- 10-701 - Introduction to Machine Learning (PhD) - Tom Mitchell, Spring 2011, CMU (Fall 2014) (Spring 2015 by Alex Smola)
- 10 - 301/601 - Introduction to Machine Learning - Spring 2020 - CMU
- CMS 165 Foundations of Machine Learning and Statistical Inference - 2020 - Caltech
- Microsoft Research - Machine Learning Course
- CS 446 - Machine Learning, Spring 2019, UIUC( Fall 2016 Lectures)
- undergraduate machine learning at UBC 2012, Nando de Freitas
- CS 229 - Machine Learning - Stanford University (Autumn 2018)
- CS 189/289A Introduction to Machine Learning, Prof Jonathan Shewchuk - UCBerkeley
- CPSC 340: Machine Learning and Data Mining (2018) - UBC
- CS4780/5780 Machine Learning, Fall 2013 - Cornell University
- CS4780/5780 Machine Learning, Fall 2018 - Cornell University (Youtube)
- CSE474/574 Introduction to Machine Learning - SUNY University at Buffalo
- CS 5350/6350 - Machine Learning, Fall 2016, University of Utah
- ECE 5984 Introduction to Machine Learning, Spring 2015 - Virginia Tech
- CSx824/ECEx242 Machine Learning, Bert Huang, Fall 2015 - Virginia Tech
- STA 4273H - Large Scale Machine Learning, Winter 2015 - University of Toronto
- CS 485/685 Machine Learning, Shai Ben-David, University of Waterloo
- STAT 441/841 Classification Winter 2017 , Waterloo
- 10-605 - Machine Learning with Large Datasets, Fall 2016 - CMU
- Information Theory, Pattern Recognition, and Neural Networks - University of Cambridge
- Python and machine learning - Stanford Crowd Course Initiative
- MOOC - Machine Learning Part 1a - Udacity/Georgia Tech (Part 1b Part 2 Part 3)
- Machine Learning and Pattern Recognition 2015/16- University of Edinburgh
- Introductory Applied Machine Learning 2015/16- University of Edinburgh
- Pattern Recognition Class (2012)- Universität Heidelberg
- Introduction to Machine Learning and Pattern Recognition - CBCSL OSU
- Introduction to Machine Learning - IIT Kharagpur
- Introduction to Machine Learning - IIT Madras
- Pattern Recognition - IISC Bangalore
- Pattern Recognition and Application - IIT Kharagpur
- Pattern Recognition - IIT Madras
- Machine Learning Summer School 2013 - Max Planck Institute for Intelligent Systems Tübingen
- Machine Learning - Professor Kogan (Spring 2016) - Rutgers
- CS273a: Introduction to Machine Learning (YouTube)
- Machine Learning Crash Course 2015
- COM4509/COM6509 Machine Learning and Adaptive Intelligence 2015-16
- 10715 Advanced Introduction to Machine Learning
- Introduction to Machine Learning - Spring 2018 - ETH Zurich
- Machine Learning - Pedro Domingos- University of Washington
- Advanced Machine Learning - 2019 - ETH Zürich
- Machine Learning (COMP09012)
- Probabilistic Machine Learning 2020 - University of Tübingen
- Statistical Machine Learning 2020 - Ulrike von Luxburg - University of Tübingen
- COMS W4995 - Applied Machine Learning - Spring 2020 - Columbia University
-
データマイニング
- CSEP 546, Data Mining - Pedro Domingos, Sp 2016 - University of Washington (YouTube)
- CS 5140/6140 - Data Mining, Spring 2016, University of Utah (Youtube)
- CS 5955/6955 - Data Mining, University of Utah (YouTube)
- Statistics 202 - Statistical Aspects of Data Mining, Summer 2007 - Google (YouTube)
- MOOC - Text Mining and Analytics by ChengXiang Zhai
- Information Retrieval SS 2014, iTunes - HPI
- MOOC - Data Mining with Weka
- CS 290 DataMining Lectures
- CS246 - Mining Massive Data Sets, Winter 2016, Stanford University (YouTube)
- Data Mining: Learning From Large Datasets - Fall 2017 - ETH Zurich
- Information Retrieval - Spring 2018 - ETH Zurich
- CAP6673 - Data Mining and Machine Learning - FAU(Video lectures)
- Data Warehousing and Data Mining Techniques - Technische Universität Braunschweig, Germany
-
Data Science
- Data 8: The Foundations of Data Science - UC Berkeley (Summer 17)
- CSE519 - Data Science Fall 2016 - Skiena, SBU
- CS 109 Data Science, Harvard University (YouTube)
- 6.0002 Introduction to Computational Thinking and Data Science - MIT OCW
- Data 100 - Summer 19- UC Berkeley
- Distributed Data Analytics (WT 2017/18) - HPI University of Potsdam
- Statistics 133 - Concepts in Computing with Data, Fall 2013 - UC Berkeley
- Data Profiling and Data Cleansing (WS 2014/15) - HPI University of Potsdam
- AM 207 - Stochastic Methods for Data Analysis, Inference and Optimization, Harvard University
- CS 229r - Algorithms for Big Data, Harvard University (Youtube)
- Algorithms for Big Data - IIT Madras
-
Probabilistic Graphical Modeling
- MOOC - Probabilistic Graphical Models - Coursera
- CS 6190 - Probabilistic Modeling, Spring 2016, University of Utah
- 10-708 - Probabilistic Graphical Models, Carnegie Mellon University
- Probabilistic Graphical Models, Daphne Koller, Stanford University
- Probabilistic Models - UNIVERSITY OF HELSINKI
- Probabilistic Modelling and Reasoning 2015/16- University of Edinburgh
- Probabilistic Graphical Models, Spring 2018 - Notre Dame
-
Deep Learning
- 6.S191: Introduction to Deep Learning - MIT
- Deep Learning CMU
- Part 1: Practical Deep Learning for Coders, v3 - fast.ai
- Part 2: Deep Learning from the Foundations - fast.ai
- Deep learning at Oxford 2015 - Nando de Freitas
- 6.S094: Deep Learning for Self-Driving Cars - MIT
- CS294-129 Designing, Visualizing and Understanding Deep Neural Networks (YouTube)
- CS230: Deep Learning - Autumn 2018 - Stanford University
- STAT-157 Deep Learning 2019 - UC Berkeley
- Full Stack DL Bootcamp 2019 - UC Berkeley
- Deep Learning, Stanford University
- MOOC - Neural Networks for Machine Learning, Geoffrey Hinton 2016 - Coursera
- Deep Unsupervised Learning -- Berkeley Spring 2020
- Stat 946 Deep Learning - University of Waterloo
- Neural networks class - Université de Sherbrooke (YouTube)
- CS294-158 Deep Unsupervised Learning SP19
- DLCV - Deep Learning for Computer Vision - UPC Barcelona
- DLAI - Deep Learning for Artificial Intelligence @ UPC Barcelona
- Neural Networks and Applications - IIT Kharagpur
- UVA DEEP LEARNING COURSE
- Nvidia Machine Learning Class
- Deep Learning - Winter 2020-21 - Tübingen Machine Learning
-
Reinforcement Learning
- CS234: Reinforcement Learning - Winter 2019 - Stanford University
- Introduction to reinforcement learning - UCL
- Advanced Deep Learning & Reinforcement Learning - UCL
- Reinforcement Learning - IIT Madras
- CS885 Reinforcement Learning - Spring 2018 - University of Waterloo
- CS 285 - Deep Reinforcement Learning- UC Berkeley
- CS 294 112 - Reinforcement Learning
- NUS CS 6101 - Deep Reinforcement Learning
- ECE 8851: Reinforcement Learning
- CS294-112, Deep Reinforcement Learning Sp17 (YouTube)
- UCL Course 2015 on Reinforcement Learning by David Silver from DeepMind (YouTube)
- Deep RL Bootcamp - Berkeley Aug 2017
- Reinforcement Learning - IIT Madras
-
Advanced Machine Learning
- Machine Learning 2013 - Nando de Freitas, UBC
- Machine Learning, 2014-2015, University of Oxford
- 10-702/36-702 - Statistical Machine Learning - Larry Wasserman, Spring 2016, CMU (Spring 2015)
- 10-715 Advanced Introduction to Machine Learning - CMU (YouTube)
- CS 281B - Scalable Machine Learning, Alex Smola, UC Berkeley
- 18.409 Algorithmic Aspects of Machine Learning Spring 2015 - MIT
- CS 330 - Deep Multi-Task and Meta Learning - Fall 2019 - Stanford University (Youtube)
-
ML based Natural Language Processing and Computer Vision
- CS 224d - Deep Learning for Natural Language Processing, Stanford University (Lectures - Youtube)
- CS 224N - Natural Language Processing, Stanford University (Lecture videos)
- CS 124 - From Languages to Information - Stanford University
- MOOC - Natural Language Processing, Dan Jurafsky & Chris Manning - Coursera
- fast.ai Code-First Intro to Natural Language Processing (Github)
- MOOC - Natural Language Processing - Coursera, University of Michigan
- CS 231n - Convolutional Neural Networks for Visual Recognition, Stanford University
- CS224U: Natural Language Understanding - Spring 2019 - Stanford University
- Deep Learning for Natural Language Processing, 2017 - Oxford University
- Machine Learning for Robotics and Computer Vision, WS 2013/2014 - TU München (YouTube)
- Informatics 1 - Cognitive Science 2015/16- University of Edinburgh
- Informatics 2A - Processing Formal and Natural Languages 2016-17 - University of Edinburgh
- Computational Cognitive Science 2015/16- University of Edinburgh
- Accelerated Natural Language Processing 2015/16- University of Edinburgh
- Natural Language Processing - IIT Bombay
- NOC:Deep Learning For Visual Computing - IIT Kharagpur
- CS 11-747 - Neural Nets for NLP - 2019 - CMU
- Natural Language Processing - Michael Collins - Columbia University
- Deep Learning for Computer Vision - University of Michigan
- CMU CS11-737 - Multilingual Natural Language Processing
-
Time Series Analysis
-
Misc Machine Learning Topics
- EE364a: Convex Optimization I - Stanford University
- CS 6955 - Clustering, Spring 2015, University of Utah
- Info 290 - Analyzing Big Data with Twitter, UC Berkeley school of information (YouTube)
- 10-725 Convex Optimization, Spring 2015 - CMU
- 10-725 Convex Optimization: Fall 2016 - CMU
- CAM 383M - Statistical and Discrete Methods for Scientific Computing, University of Texas
- 9.520 - Statistical Learning Theory and Applications, Fall 2015 - MIT
- Reinforcement Learning - UCL
- Regularization Methods for Machine Learning 2016 (YouTube)
- Statistical Inference in Big Data - University of Toronto
- 10-725 Optimization Fall 2012 - CMU
- 10-801 Advanced Optimization and Randomized Methods - CMU (YouTube)
- Reinforcement Learning 2015/16- University of Edinburgh
- Reinforcement Learning - IIT Madras
- Statistical Rethinking Winter 2015 - Richard McElreath
- Music Information Retrieval - University of Victoria, 2014
- PURDUE Machine Learning Summer School 2011
- Foundations of Machine Learning - Blmmoberg Edu
- Introduction to reinforcement learning - UCL
- Advanced Deep Learning & Reinforcement Learning - UCL
- Web Information Retrieval (Proff. L. Becchetti - A. Vitaletti)
- Big Data Systems (WT 2019/20) - Prof. Dr. Tilmann Rabl - HPI
- Distributed Data Analytics (WT 2017/18) - Dr. Thorsten Papenbrock - HPI
-
Probability & Statistics
- 6.041 Probabilistic Systems Analysis and Applied Probability - MIT OCW
- Statistics 110 - Probability - Harvard University
- STAT 2.1x: Descriptive Statistics | UC Berkeley
- STAT 2.2x: Probability | UC Berkeley
- MOOC - Statistics: Making Sense of Data, Coursera
- MOOC - Statistics One - Coursera
- Probability and Random Processes - IIT Kharagpur
- MOOC - Statistical Inference - Coursera
- 131B - Introduction to Probability and Statistics, UCI
- STATS 250 - Introduction to Statistics and Data Analysis, UMichigan
- Sets, Counting and Probability - Harvard
- Opinionated Lessons in Statistics (Youtube)
- Statistics - Brandon Foltz
- Statistical Rethinking: A Bayesian Course Using R and Stan (Lectures - Aalto University) (Book)
- 02402 Introduction to Statistics E12 - Technical University of Denmark (F17)
-
Linear Algebra
- 18.06 - Linear Algebra, Prof. Gilbert Strang, MIT OCW
- 18.065 Matrix Methods in Data Analysis, Signal Processing, and Machine Learning - MIT OCW
- Linear Algebra (Princeton University)
- MOOC: Coding the Matrix: Linear Algebra through Computer Science Applications - Coursera
- CS 053 - Coding the Matrix - Brown University (Fall 14 videos)
- Linear Algebra Review - CMU
- A first course in Linear Algebra - N J Wildberger - UNSW
- INTRODUCTION TO MATRIX ALGEBRA
- Computational Linear Algebra - fast.ai (Github)
-
MIT 18.065 Matrix Methods in Data Analysis, Signal Processing, and Machine Learning
-
36-705 - Intermediate Statistics - Larry Wasserman, CMU (YouTube)
-
Statistical Computing for Scientists and Engineers - Notre Dame
-
Mathematics for Machine Learning, Lectures by Ulrike von Luxburg - Tübingen Machine Learning
- CS 223A - Introduction to Robotics, Stanford University
- 6.832 Underactuated Robotics - MIT OCW
- CS287 Advanced Robotics at UC Berkeley Fall 2019 -- Instructor: Pieter Abbeel
- CS 287 - Advanced Robotics, Fall 2011, UC Berkeley (Videos)
- CS235 - Applied Robot Design for Non-Robot-Designers - Stanford University
- Lecture: Visual Navigation for Flying Robots (YouTube)
- CS 205A: Mathematical Methods for Robotics, Vision, and Graphics (Fall 2013)
- Robotics 1, Prof. De Luca, Università di Roma (YouTube)
- Robotics 2, Prof. De Luca, Università di Roma (YouTube)
- Robot Mechanics and Control, SNU
- Introduction to Robotics Course - UNCC
- SLAM Lectures
- Introduction to Vision and Robotics 2015/16- University of Edinburgh
- ME 597 – Autonomous Mobile Robotics – Fall 2014
- ME 780 – Perception For Autonomous Driving – Spring 2017
- ME780 – Nonlinear State Estimation for Robotics and Computer Vision – Spring 2017
- METR 4202/7202 -- Robotics & Automation - University of Queensland
- Robotics - IIT Bombay
- Introduction to Machine Vision
- 6.834J Cognitive Robotics - MIT OCW
- Hello (Real) World with ROS – Robot Operating System - TU Delft
- Programming for Robotics (ROS) - ETH Zurich
- Mechatronic System Design - TU Delft
- CS 206 Evolutionary Robotics Course Spring 2020
- Foundations of Robotics - UTEC 2018-I
- Robotics - Youtube
- Robotics and Control: Theory and Practice IIT Roorkee
- Mechatronics
- ME142 - Mechatronics Spring 2020 - UC Merced
- Mobile Sensing and Robotics - Bonn University
- MSR2 - Sensors and State Estimation Course (2020) - Bonn University
- SLAM Course (2013) - Bonn University
- ENGR486 Robot Modeling and Control (2014W)
- Robotics by Prof. D K Pratihar - IIT Kharagpur
- Introduction to Mobile Robotics - SS 2019 - Universität Freiburg
- Robot Mapping - WS 2018/19 - Universität Freiburg
- Mechanism and Robot Kinematics - IIT Kharagpur
- Self-Driving Cars - Cyrill Stachniss - Winter 2020/21 - University of Bonn)
- Mobile Sensing and Robotics 1 – Part Stachniss (Jointly taught with PhoRS) - University of Bonn
- Mobile Sensing and Robotics 2 – Stachniss & Klingbeil/Holst - University of Bonn
500の実装付きAI・機械学習・ディープラーニング・コンピュータビジョン・自然言語処理(NLP)プロジェクト
このリストは現在も更新中です。 - プルリクエストをいただければ、更新させていただきます。
Sr No | Name | Link |
---|---|---|
1 | 180 Machine learning Project | is.gd/MLtyGk |
2 | 12 Machine learning Object Detection | is.gd/jZMP1A |
3 | 20 NLP Project with Python | is.gd/jcMvjB |
4 | 10 Machine Learning Projects on Time Series Forecasting | is.gd/dOR66m |
5 | 20 Deep Learning Projects Solved and Explained with Python | is.gd/8Cv5EP |
6 | 20 Machine learning Project | is.gd/LZTF0J |
7 | 30 Python Project Solved and Explained | is.gd/xhT36v |
8 | Machine learning Course for Free | https://lnkd.in/ekCY8xw |
9 | 5 Web Scraping Projects with Python | is.gd/6XOTSn |
10 | 20 Machine Learning Projects on Future Prediction with Python | is.gd/xDKDkl |
11 | 4 Chatbot Project With Python | is.gd/LyZfXv |
12 | 7 Python Gui project | is.gd/0KPBvP |
13 | All Unsupervised learning Projects | is.gd/cz11Kv |
14 | 10 Machine learning Projects for Regression Analysis | is.gd/k8faV1 |
15 | 10 Machine learning Project for Classification with Python | is.gd/BJQjMN |
16 | 6 Sentimental Analysis Projects with python | is.gd/WeiE5p |
17 | 4 Recommendations Projects with Python | is.gd/pPHAP8 |
18 | 20 Deep learning Project with python | is.gd/l3OCJs |
19 | 5 COVID19 Projects with Python | is.gd/xFCnYi |
20 | 9 Computer Vision Project with python | is.gd/lrNybj |
21 | 8 Neural Network Project with python | is.gd/FCyOOf |
22 | 5 Machine learning Project for healthcare | https://bit.ly/3b86bOH |
23 | 5 NLP Project with Python | https://bit.ly/3hExtNS |
24 | 47 Machine Learning Projects for 2021 | https://bit.ly/356bjiC |
25 | 19 Artificial Intelligence Projects for 2021 | https://bit.ly/38aLgsg |
26 | 28 Machine learning Projects for 2021 | https://bit.ly/3bguRF1 |
27 | 16 Data Science Projects with Source Code for 2021 | https://bit.ly/3oa4zYD |
28 | 24 Deep learning Projects with Source Code for 2021 | https://bit.ly/3rQrOsU |
29 | 25 Computer Vision Projects with Source Code for 2021 | https://bit.ly/2JDMO4I |
30 | 23 Iot Projects with Source Code for 2021 | https://bit.ly/354gT53 |
31 | 27 Django Projects with Source Code for 2021 | https://bit.ly/2LdRPRZ |
32 | 37 Python Fun Projects with Code for 2021 | https://bit.ly/3hBHzz4 |
33 | 500 + Top Deep learning Codes | https://bit.ly/3n7AkAc |
34 | 500 + Machine learning Codes | https://bit.ly/3b32n13 |
35 | 20+ Machine Learning Datasets & Project Ideas | https://bit.ly/3b2J48c |
36 | 1000+ Computer vision codes | https://bit.ly/2LiX1nv |
37 | 300 + Industry wise Real world projects with code | https://bit.ly/3rN7lVR |
38 | 1000 + Python Project Codes | https://bit.ly/3oca2xM |
39 | 363 + NLP Project with Code | https://bit.ly/3b442DO |
40 | 50 + Code ML Models (For iOS 11) Projects | https://bit.ly/389dB2s |
41 | 180 + Pretrained Model Projects for Image, text, Audio and Video | https://bit.ly/3hFyQMw |
42 | 50 + Graph Classification Project List | https://bit.ly/3rOYFhH |
43 | 100 + Sentence Embedding(NLP Resources) | https://bit.ly/355aS8c |
44 | 100 + Production Machine learning Projects | https://bit.ly/353ckI0 |
45 | 300 + Machine Learning Resources Collection | https://bit.ly/3b2LjIE |
46 | 70 + Awesome AI | https://bit.ly/3hDIXkD |
47 | 150 + Machine learning Project Ideas with code | https://bit.ly/38bfpbg |
48 | 100 + AutoML Projects with code | https://bit.ly/356zxZX |
49 | 100 + Machine Learning Model Interpretability Code Frameworks | https://bit.ly/3n7FaNB |
50 | 120 + Multi Model Machine learning Code Projects | https://bit.ly/38QRI76 |
51 | Awesome Chatbot Projects | https://bit.ly/3rQyxmE |
52 | Awesome ML Demo Project with iOS | https://bit.ly/389hZOY |
53 | 100 + Python based Machine learning Application Projects | https://bit.ly/3n9zLWv |
54 | 100 + Reproducible Research Projects of ML and DL | https://bit.ly/2KQ0J8C |
55 | 25 + Python Projects | https://bit.ly/353fRpK |
56 | 8 + OpenCV Projects | https://bit.ly/389mj0B |
57 | 1000 + Awesome Deep learning Collection | https://bit.ly/3b0a9Jj |
58 | 200 + Awesome NLP learning Collection | https://bit.ly/3b74b9o |
59 | 200 + The Super Duper NLP Repo | https://bit.ly/3hDNnbd |
60 | 100 + NLP dataset for your Projects | https://bit.ly/353h2Wc |
61 | 364 + Machine Learning Projects definition | https://bit.ly/2X5QRdb |
62 | 300+ Google Earth Engine Jupyter Notebooks to Analyze Geospatial Data | https://bit.ly/387JwjC |
63 | 1000 + Machine learning Projects Information | https://bit.ly/3rMGk4N |
64. | 11 Computer Vision Projects with code | https://bit.ly/38gz2OR |
65. | 13 Computer Vision Projects with Code | https://bit.ly/3hMJdhh |
66. | 13 Cool Computer Vision GitHub Projects To Inspire You | https://bit.ly/2LrSv6d |
67. | Open-Source Computer Vision Projects (With Tutorials) | https://bit.ly/3pUss6U |
68. | OpenCV Computer Vision Projects with Python | https://bit.ly/38jmGpn |
69. | 100 + Computer vision Algorithm Implementation | https://bit.ly/3rWgrzF |
70. | 80 + Computer vision Learning code | https://bit.ly/3hKCpkm |
71. | Deep learning Treasure | https://bit.ly/359zLQb |
#100+ Free Machine Learning Books
Part 1:- 学習ロードマップ
Part 2:- 無料オンラインコース
Part 3:
Part 4: