An open API service indexing awesome lists of open source software.

https://github.com/dakimura/learn-data-science-for-free-jp

初学者がデータサイエンスをコンパクトに一通り学ぶための無料の資料です。
https://github.com/dakimura/learn-data-science-for-free-jp

artificial-intelligence computer-vision data-science datascienceproject deeplearning machine-learning machine-learning-algorithms natural-language-processing neural-networks

Last synced: about 1 year ago
JSON representation

初学者がデータサイエンスをコンパクトに一通り学ぶための無料の資料です。

Awesome Lists containing this project

README

          

#### このリポジトリは https://github.com/therealsreehari/Learn-Data-Science-For-Free の和訳です.

---
このリポジトリはデータサイエンスを一通りコンパクトに学ぶための「無料の」ドキュメントです。

4つのパートに分かれています。

Part 1:- [学習ロードマップ]

Part 2:- [無料のオンラインコース]

Part 3:- [500個のデータサイエンス関連プロジェクト]

Part 4:- [100個以上の(無料の)機械学習関連書籍]

このリポジトリは、インターネット上に散らばっている様々な資料を組み合わせて作ったものです。貴重な資料を組み合わせることで、構造化されたデータサイエンスの学習リソースを無料で提供し、
全ての初学者を助けるために作成されました。このリポジトリが、データサイエンスを学びたいけれど多額の教育費を払えない多くの人々の助けになることを願っています。
このリポジトリは、新しい資料がどこかで見つかる度に定期的に更新していく予定です。

もしこのリポジトリが気に入ったら、ぜひデータサイエンスの学習リソースを必要としている方に共有してあげてください。

更新情報については、[元リポジトリの作成者のツイッター](https://twitter.com/therealsreehari) をフォローしてください。

この資料が有益だと思ったらGithub上で🌟をください、そして他のデータサイエンス愛好家たちにもぜひ共有してあげてください。

# データサイエンティストの学習ロードマップ(2021)

![ロードマップ図](http://nirvacana.com/thoughts/wp-content/uploads/2013/07/RoadToDataScientist1.png)

****

# 1_基礎

## 1_行列と代数の基礎

### 概要

数学において、行列とは __行と列に配置された数、記号、または式からなる長方形の配列__ です。 行列は行および/または列の任意の集合を削除することで、部分行列に分解することができます。

![行列のイメージ](https://upload.wikimedia.org/wikipedia/commons/b/bb/Matrix.svg)

### 演算

行列には適用できるいくつかの基本的な演算があります。

* [加法](https://en.wikipedia.org/wiki/Matrix_addition)
* [スカラー乗算](https://en.wikipedia.org/wiki/Scalar_multiplication)
* [転置](https://en.wikipedia.org/wiki/Transpose)
* [行列乗算](https://en.wikipedia.org/wiki/Matrix_multiplication)

## 2_ ハッシュ関数、二分木、O(n)(オーダー記法)

### ハッシュ関数

#### 定義

ハッシュ関数とは、__任意のサイズのデータを固定長のサイズに変換できるあらゆる関数のこと__ です。利用法の一つにハッシュテーブルというデータ構造があり、
コンピュータソフトウェアにおいて高速にデータを参照するために広く用いられています。ハッシュ関数は、大きなファイルにおいて重複するレコードを検出することでテーブルやデータベースの参照を高速化します。

![ハッシュのイメージ](https://upload.wikimedia.org/wikipedia/commons/5/58/Hash_table_4_1_1_0_0_1_0_LL.svg)

### 二分木

#### 定義

コンピュータ・サイエンスにおいて、二分木とは __それぞれのノードが2つの子ノードを持つデータ構造__ で、それぞれ「左右の」子ノードと表現されます。

![二分木のイメージ](https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_tree.svg)

### O(n)

#### 定義

コンピュータ・サイエンスにおいて、オーダー(O)記法はアルゴリズムにおいて __入力サイズが大きくなるにつれて必要になる実行時間と空間の増加量__ を議論するために用いられます。また、解析的整数論においては、O記法はしばしば __算術関数と近似値の違いの境界を表現する__ ために用いられます。

## 3_ 関係代数, データベースの基礎

### 定義

関係代数とは、 __関係データベースに格納されているデータをモデル化し、それに対するクエリを定義するために使用される、確立された意味論を持つ代数族__ です。

関係代数の主な用途としては、__関係データベース__ の理論的基礎を提供することが挙げられます。特にデータベースへのクエリ言語として、SQLがよく知られています。

### 自然結合(Natural join)

#### 概要

SQLにおいて、2つのテーブル間の自然結合は以下の条件下で可能です。

* 少なくとも1つ以上の列が同じ名前を持っていること
* その列が同じデータ型を持っていること
* CHAR (文字)
* INT (整数)
* FLOAT (浮動小数点数)
* VARCHAR (文字列)

#### mySQLリクエスト例

SELECT
FROM
NATURAL JOIN

SELECT
FROM ,
WHERE TABLE_1.ID = TABLE_2.ID

## 4_ 内部結合、外部結合、クロス結合, θ(シータ)結合

### 内部結合(inner join)

INNER JOIN句は、両方のテーブルに存在するレコードを抽出します。

#### リクエスト例

SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;

![内部結合のイメージ](https://www.w3schools.com/sql/img_innerjoin.gif)

### 外部結合(Outer join)

FULL OUTER JOIN句は左テーブル(テーブル1)もしくは右テーブル(テーブル2)に存在する全てのレコードを返却します。

#### Request

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

![外部結合のイメージ](https://www.w3schools.com/sql/img_fulljoin.gif)

### 左結合(Left join)

LEFT JOIN句は左テーブル(table1)に存在する全てのレコードと、右テーブルにおいて合致する値を持つレコードを返却します。合致する値が無い場合は右の値がNULLになります。

#### リクエスト例

SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;

![左結合のイメージ](https://www.w3schools.com/sql/img_leftjoin.gif)

### 右結合(Right join)

RIGHT JOIN句は右テーブル(table2)に存在する全てのレコードと、左テーブルにおいて合致する値を持つレコードを返却します。合致する値がない場合は、右の値がNULLになります。

#### Request

SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;

![left-join-image](https://www.w3schools.com/sql/img_rightjoin.gif)

## 5_ CAP定理

CAP定理は、分散データストアにおいて次の3つの全てを同時に満たすことはできないとする理論です。

* 全てのread(読み込み)が最新の書き込み結果(かエラー)を受け取ることができる。(一貫性)
* 全てのリクエストが、(最新の書き込み結果であるという保証は無く、)(エラーではない)レスポンスを受け取ることができる。(可用性)
* ネットワークでつながるノード間で任意の数のメッセージを取りこぼし(もしくは遅延し)たとしても、システムが動作を継続することができる。(分断耐性)

言い換えると、CAP定理とは、「ネットワークが分断されている中では、一貫性か可用性のどちらかを選ばなければならない」ということを示しています。ただ、ここで言う一貫性はデータベーストランザクションにおけるACID特性で知られる「一貫性」の定義とは異なるということに注意してください。

## 6_ 表形式データ

表形式データはSQLのような関係データとは相対するものです。

表形式データにおいては、 __全てが行と列に整形されています__ 。
全ての行は同じ個数の列を持っています。(ただし欠けているデータは"N/A"などで埋め替えられるとして。)

表形式データの __最初の行__ はほとんどの場合 __ヘッダ__ で、各列の名前や説明が記載されています。

データサイエンスにおいて最もよく使われる表形式データのフォーマットは __CSV__ です。全ての列は1文字(タブやカンマなど)によって区切られています。

## 7_ エントロピー

エントロピーは、__不確実性の尺度__ です。エントロピーが大きいということは、データの分散が大きく、情報やノイズが多く含まれていることを意味します。

例えば、すべてのxに対してf(x)=4となる定数関数は、エントロピーがなく、容易に予測可能であり、情報量が少なく、ノイズがなく、簡潔に表現することができます。同様に、f(x)=~4はある程度のエントロピーを持ちますが、f(x)=乱数はノイズのために非常に高いエントロピーを持っているといえます。

## 8_ データフレームとシリーズ(系列)

データフレームは、データのテーブルを格納するために使用される形式です。同じ長さのベクターのリスト、とも言えます。。

シリーズ(系列)とは、一連のデータポイントを並べたものです。

## 9_ シャーディング

*シャーディング* とは、垂直方向(列単位)のパーティショニングである「正規化」に対して、水平方向(行単位)に行うデータベースのパーティショニング(分割)のことです。

シャーディングを使う理由は?

1. 大規模なデータセットや高スループットのアプリケーションを持つデータベースシステムは、サーバ1台の容量では対応できない場合があります。
2. 垂直方向のスケーリングと水平方向のスケーリングという2つのデータ増大に対応するため
3. 垂直方向のスケーリングとは

* 1台のサーバーの容量を増やすことです。
* しかし、技術的、コスト観点の制約から、1台のマシンでは所定のワークロードに対応できない場合があります。

4. 水平方向のスケーリング
* データセットと負荷を複数台のサーバーに分割し、必要に応じてサーバー数を追加して容量を増加させることです。

* 1台のマシンの性能や容量は高くなくてもよいです
各マシンが全体的なワークロードの一部を処理するため、1台の高速・大容量サーバーよりもパフォーマンスを良くすることができます
* 分散システムの概念を利用して、規模の拡大を図ることができます。
* しかし、分散システムでは、複雑性が増すというトレードオフがあります。
* 多くのデータベースシステムは、このシャーディングを行うことで水平方向のスケーリングを実現しています。

## 10_ オンライン分析処理(Online Analytical Processing, OLAP)

オンライン分析処理(OLAP)は、多次元分析(Multidimensional Analysis, MDA)のクエリにより速く答えるためのアプローチの一つです。

OLAPは、関係データベース、レポート作成、データマイニングなどを含む、ビジネス・インテリジェンスという幅広いカテゴリの技術の一部です。OLAPの典型的なアプリケーションとしては、 __販売、マーケティング、管理レポート、ビジネスプロセス管理(BPM)、予算の編成と予測、財務報告など__があり、農業などの新しいアプリケーションも登場しています。

OLAPという言葉は、従来のデータベース用語である「Online Transaction Processing(OLTP)」を少し変えたものとして生まれました。

## 11_ 多次元データモデル (Multidimensional Data model)

## 抽出、Transform、ロード(12_ Extrace, Transform, and Load. ETL)

* 抽出
* 複数の異なるソースシステムからデータを抽出する。
* 抽出されたデータが、特定のドメインにおいて正しい/期待される値を持っているかどうかを確認するデータの検証作業

* Transform
* 抽出されたデータが、データの上に複数の機能用のパイプラインに供給できるようにすること
* 最終的なシステムに受け入れられる形にデータフォーマットを変換すること
* ノイズ、異常、余剰データを除去するために、データのクリーニングを行うこと

* ロード
* 変換されたデータを対象システムに読み込む。

## 13_ レポーティング vs BI vs 分析

## 14_ JSONとXML

### JSON

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

XMLはマークアップ言語の一つで、人間にも機械にも読みやすい形で、ドキュメントをエンコードする一連のルールを定義します。



Bloodroot
Sanguinaria canadensis
4
Mostly Shady
$2.44
031599


Columbine
Aquilegia canadensis
3
Mostly Shady
$9.37
030699


Marsh Marigold
Caltha palustris
4
Mostly Sunny
$6.81
051799

## 15_ NoSQL

NoSQLは関連データベースと相対する概念です。 __N__ot __O__nly __SQL__ からきています。 データは構造化されておらず、テーブル間のキーの概念もありません。

複雑なデータ間の関係性を考えることなく、あらゆる種類のデータ(JSON、CSVなど)をNoSQLデータベースに保存することができます。

__よく使われるNoSQLスタック__: Cassandra, MongoDB, Redis, Oracle noSQL ...

## 16_ 正規表現(Regex)

### 概要

正規表現 ( __Reg__ ular __ex__ pressions (__regex__)) は情報科学で一般的に使われています。

下記のような広い用途に使われます。

* テキスト置換
* テキスト内の情報を抽出(メール、電話番号など)
* .txtの拡張子を持つファイルのリストアップ ...

正規表現を試したい場合、http://regexr.com/ で実験することができます。

### 使用方法

[Python](https://docs.python.org/3/library/re.html) で正規表現を使いたい場合:

import re

## 17_ ベンダーの状況

## 18_ 環境構築

# 2_ 統計学

[データ初心者のための統計学はじめの一歩](https://medium.com/@debuggermalhotra/statistics-101-for-data-noobs-2e2a0e23a5dc)

## 1_ データセットの選択

### データセット提供リポジトリ

#### 一般用

- [KAGGLE](https://www.kaggle.com/datasets)
- [Google](https://toolbox.google.com/datasetsearch)

#### 医療

- [PMC](https://www.ncbi.nlm.nih.gov/pmc/)

#### 他言語

##### フランス語

- [DATAGOUV](https://www.data.gouv.fr/fr/)

## 2_ 記述統計学

### 平均値(Mean)

確率と統計学において、母集団平均と期待値は同じような意味で __変数の確率分布の中心的な傾向の測定方法の1つ__ を指すために同じような意味で使用されます。

データセットを扱うとき、「算術平均」、「数学的期待値」、「平均」という用語は、離散的な数字の集合の中心値を指すときすらあり、それらは同じような意味の言葉として使用されますが、具体的には __「値の合計を値の数で割ったもの」__ です。

![平均値の数式](https://wikimedia.org/api/rest_v1/media/math/render/svg/bd2f5fb530fc192e4db7a315777f5bbb5d462c90)

### 中央値(Median)

中央値とは、データサンプル、母集団、または __確率分布の上位半分と下位半分を分ける値__ のことです。簡単に言えば、データセットの「真ん中」の値と考えればよいです。

### Pythonによる記述統計

[Numpy](http://www.numpy.org/) がpythonで統計的分析に用いられるライブラリとして広く知られています。

#### インストール方法

pip3 install numpy

#### 利用方法

import numpy

## 3_ 探索的データ分析

データの可視化と分析を行うデータサイエンスの初めの一歩といえる処理を「探索的データ分析(explanatory data analysis)」と呼びます。

生データではデータの分布が不適切な場合があり、問題につながる可能性があります。

例えばデータが直線的に分布しているのか、それとも螺旋状に分布しているのか、なども知っておく必要もあります。

[Pythonにおける探索的データ分析の手引](https://towardsdatascience.com/data-preprocessing-and-interpreting-results-the-heart-of-machine-learning-part-1-eda-49ce99e36655)

##### Pythonライブラリ

[Matplotlib](https://matplotlib.org/)

Library used to plot graphs in Python

__インストール方法__:

pip3 install matplotlib

__使用方法__:

import matplotlib.pyplot as plt

[Pandas](https://pandas.pydata.org/)

Pythonで大規模なデータセットを扱うためのライブラリです。

__インストール方法__:

pip3 install pandas

__使用方法__:

import pandas as pd

[Seaborn](https://seaborn.pydata.org/)

もう一つのpythonのグラフ描画用ライブラリです。

__インストール方法__:

pip3 install seaborn

__使用方法__:

import seaborn as sns

### 主成分分析(Principle Component Analysis, PCA)

PCAは主成分分析(Principle Component Analysis)と呼ばれるものです。

これまで見てきたように、データ分布の形を知りたくなることはよくあります。そのためには、データをプロットする必要があります。

しかしデータは多次元である可能性があります。つまり、データセットは複数の特徴量を持ちうるということです。

我々は2次元のデータしかプロットできないので、多次元データの場合は、多次元の分布を、分布の主たる成分を保ったまま2次元に投影し、2次元のプロットで実際の分布を把握します。

これは次元削減にも使われます。しばしば、いくつかの特徴量が、データの分布に対して重要な洞察に大きく寄与していないことがあります。このような特徴量はデータを複雑にし、次元を増加させるばかりなので。そのような特徴は考慮しないことでデータの次元を減らすことができます。

[数学的説明](https://medium.com/towards-artificial-intelligence/demystifying-principal-component-analysis-9f13f6f681e6)

[Pythonでの応用](https://towardsdatascience.com/data-preprocessing-and-interpreting-results-the-heart-of-machine-learning-part-2-pca-feature-92f8f6ec8c8)

## 4_ ヒストグラム

ヒストグラムは、数値データの分布を表すものです。範囲(ビン)に分割する作業を用いて数値を束ねていくことで構成します。
すなわち、データが取りうる値の範囲全体をいくつかの固定された区間に分割するのです。各範囲(ビン)に属するデータの個数または出現頻度が表現されます。

[ヒストグラム](https://en.wikipedia.org/wiki/Histogram)

![プロット](https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/Example_histogram.png/220px-Example_histogram.png)

pythonでは、__Pandas__ , __Matplotlib__ , __Seaborn__ などを使ってヒストグラムを作成することができます。

## 5_ パーセンタイルと外れ値

### パーセンタイル

パーセンタイルとは、統計学における指標の一つであり、数値データの分布において、ある数値や事例を下回るデータがどれだけあるか、あるいはどれだけの割合であるかを表す値です。

たとえば、「70パーセンタイル」と言うと、それは「分布のうち70%のデータはその数値の中に含まれる」ことを意味します。

[Percentiles](https://en.wikipedia.org/wiki/Percentile)

### 外れ値(Outliers)

外れ値とは,他のデータ点とは大きく違いがあるデータ点(の数値)のことです。これらの点は、分布内の大部分の点とは異なります。このような点は、平均値や中央値のような分布の中心的な測定値に大きな影響を引き起こす可能性があります。そのため、こういった外れ値は検出して除去する必要があります。

[外れ値](https://www.itl.nist.gov/div898/handbook/prc/section1/prc16.htm)

外れ値を見つける際には __ボックス図__ がよく用いられます。 __Seaborn__ ライブラリを使って作成することができます。

![Image_Box_Plot](https://miro.medium.com/max/612/1*105IeKBRGtyPyMy3-WQ8hw.png)

## 6_ 確率理論

__確率__とは、ランダムな試行において事象の起きる可能性を数値化したものです。例えば、コインが投げられた場合、表が出る可能性は50%なので確率は0.5となります。

__サンプル空間__。ランダムな試行のすべての可能な結果の集合です。
__好ましい結果__。ランダムな試行で、出ることが求められている結果の集合です。

__確率 = (好ましい結果の数) / (サンプル空間)__.

__確率論__: 確率という概念に関する数学の一分野です。

[確率の基礎](https://towardsdatascience.com/basic-probability-theory-and-statistics-3105ab637213)

## 7_ ベイズ理論

### 条件付き確率:

これは、別の事象がすでに発生しているときのある事象が発生する確率です。つまり、2つの事象とそれらの事象の発生確率の関係性を示すものです。

下記のように表されます。

__P( A | B )__ : Bが発生したうえで、Aが発生する確率

公式は下記のように表されます。

![公式](https://wikimedia.org/api/rest_v1/media/math/render/svg/74cbddb93db29a62d522cd6ab266531ae295a0fb)

つまり、 P(A|B) はAとBの両方が発生する確率を、Bの発生確率で割ったものです。

[Guide to Conditional Probability](https://en.wikipedia.org/wiki/Conditional_probability)

### ベイズの定理

ベイズの定理は、条件付き確率を計算する方法です。機械学習の中でも特にベイジアン分類器などで広く使われています。

ベイズの定理によると、
Bが既に発生している場合のAの確率 = Aの確率に、「Aが既に発生している場合のBの確率」をBの確率で割ったものを掛けたもの
となります。以下のように表されます。

__P(A|B) = P(A).P(B|A) / P(B)__

[ベイズの定理の手引き](https://machinelearningmastery.com/bayes-theorem-for-machine-learning/)

## 8_ 確率変数

確率変数とは、実験やランダムな出来事の結果として得られる数値のことです。通常、複数の値を持っています。

確率変数には大きく分けて2つの種類があります。

__離散確率変数(Discrete Random Variables)__ :有限個の異なる値をとります。

__連続確率変数(Continuous Random Variables)__ : 無限の値をとることができます。

## 9_ Cumul Dist Fn (CDF)

確率論と統計学においては、__x__ における実数値をとる確率変数の累積分布関数(Cumulative Distribution Function, CDF) __X__(もしくは単に __X__ の分布関数)の値は、__x__ 以下の値を取る確率を表します。

実数値をとる確率変数 Xの累積分布関数は以下の関数で表されます。

![累積分布関数(CDF)](https://wikimedia.org/api/rest_v1/media/math/render/svg/f81c05aba576a12b4e05ee3f4cba709dd16139c7)

参考資料:

[Wikipedia](https://en.wikipedia.org/wiki/Cumulative_distribution_function)

## 10_ 連続確率分布

連続確率分布とは、連続確率変数がとりうる値の確率を表現します。
連続確率変数とは、連続値をとる、つまり特定範囲において無限の値を取りうる確率変数のことです。

## 11_ 歪度(わいど)、スキュー

歪度(スキュー)とは、データの分布や確率変数の分布がその平均値からどの程度離れているかの「ひずみ」を表す指標で、 正、負、もしくは0の値を取ることができます。

![歪度のイメージ図](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Negative_and_positive_skew_diagrams_%28English%29.svg/446px-Negative_and_positive_skew_diagrams_%28English%29.svg.png)

__負の歪__: 分布が右に集中しており、左に長いしっぽを持ちます。

__正の歪__: 分布が左に集中しており、右に長いしっぽを持ちます。

中心傾向の測定値の変化を以下に示します。

![cet](https://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Relationship_between_mean_and_median_under_different_skewness.png/434px-Relationship_between_mean_and_median_under_different_skewness.png)

データの分布はしばしば歪んでおり、データ処理を行う際これがしばしば問題になります。
__歪んだ分布は、その対数(log)をとることで対称な分布に変換できる可能性があります__。

##### スキュー(歪度)分布

![スキュー](https://miro.medium.com/max/379/1*PLSczKIQRc8ZtlvHED-6mQ.png)

##### スキュー分布の対数

![log](https://miro.medium.com/max/376/1*4GFayBYKIiqAcyI69wIFzA.png)

[歪度の手引き](https://en.wikipedia.org/wiki/Skewness)

## 12_ ANOVA

ANOVA は __Analysis of Variance(分散分析)__ を意味します。

データ分布をグループ間で比較するために使用されます。

しばしば我々は大量のデータを扱います。扱いきれないほど大量であることもあります。その合計データは__母集団__と呼ばれます。

そういったデータを扱うために、データの中からランダムに一部のデータをピックアップして扱うことがあります。これらは__サンプル__と呼ばれます。

ANOVAはそうしたグループ、もしくはサンプルの分散を比較するために用いられます。

グループの分散は次のように与えられます。

![分散](https://miro.medium.com/max/446/1*yzAMFVIEFysMKwuT0YHrZw.png)

集められたサンプル群の差はグループの平均値の差を用いて観測されます。平均値を比較するために__t検定__がしばしば用いられ、またサンプルが同じ母集団に属するかどうかをチェックするためにもこれは用いられます。

さて、t検定は2つのグループを対象として利用可能ですが、しばしばもっと多くのグループやサンプルを対象にすることもあるかと思います。

3つ以上のグループに対してt検定を行うときは、t検定をそれぞれのペアに対して複数回行う必要があります。このために、ANOVAが用いられます。

ANOVAには2つの要素があります。

__1.それぞれのグループ内の変動__

__2.グループ間の変動__

__F値__と呼ばれる比率の上で動作し、次のように表されます。

![F値](https://miro.medium.com/max/491/1*I5dSwtUICySQ5xvKmq6M8A.png)

F値は合計の変動のうちどれくらいがグループ間の変動から来て、どれくらいがグループ内の変動から来るものなのかを表します。 もしほとんどの変動がグループ間から来る場合は、グループ間の平均値がより異なる可能性が高いでしょう。
しかし、もし変動がグループ内からくる場合は、対象の要素は全体グループとは異なるグループであると結論づけられるでしょう。 F値が大きいほど、グループはより異なる平均値を持つでしょう。

参考資料

[定義](https://statistics.laerd.com/statistical-guides/one-way-anova-statistical-guide.php)

[ガイド1](https://towardsdatascience.com/anova-analysis-of-variance-explained-b48fee6380af)

[詳細](https://medium.com/@StepUpAnalytics/anova-one-way-vs-two-way-6b3ff87d3a94)

## 13_ 確率密度関数(Prob Den Fn, PDF)

Prob Den FnはProbability Density Function(確率密度関数)を意味します。

__確率理論において確率密度関数(PDF)もしくは確率変数密度とは、サンプル空間(確率変数が取る可能性のある値の集合)における任意のサンプル点におけるその値が、確率変数の値に等しいだろうという相対的な尤度を提供する関数__です。

連続する分布の確率密度関数(PDF) P(x)は(累積)分布関数D(x)の導関数として定義されます。

逆に、分布関数は特定の範囲の積分として与えられます。

![確率密度変数(PDF)](https://wikimedia.org/api/rest_v1/media/math/render/svg/45fd7691b5fbd323f64834d8e5b8d4f54c73a6f8)

## 14_ 中心極限定理

## 15_ モンテカルロ法

## 16_ 仮説検定

### 曲線の種類

まず2種類の曲線について知る必要があります。

分布曲線とは、分布上の値に、ある事例や母集団のサンプルが見つかる確率を表す曲線です。

__正規分布__

![正規分布](https://sciences.usca.edu/biology/zelmer/305/norm/stanorm.jpg)

正規分布は、データがどのように分布しているかを表すものの一つです。分布内のデータサンプルのほとんどが平均値とその周辺に散らばっており、その他の少数が長い尾端に散らばっています。

正規分布において抑えておくべきポイントがいくつかあります。

1. 曲線は常にベル型をしています。データのほとんどが平均値付近にあるため、平均値や中心値でサンプルが見つかる確率が高くなるためです。

2. 対称な曲線であること

3. 曲線の下の面積が常に1であること。これは、分布するすべての点が曲線の下に存在しなければならないからです。

4. 正規分布では、平均値と中央値は分布の中で同じ線上にあること

__標準正規分布__

標準正規分布は、以下の条件を満たす正規分布のことです。

1. 分布の平均値が0

2. 分布の標準偏差が1

仮説検定の考え方は、このデータ分布に基づいて行われます。

### 仮説検定

仮説検定とは、実験データから統計的に正しい結論を下すための手法の1つです。
仮説検定は、母集団の特定のパラメータについて下す何らかの推定です。

たとえば、クラスの「男子の身長は女子の身長より高い」という仮説があったとします。

この陳述はクラスという母集団に関する仮定でしかありません。

__仮説__とは情報やデータのセットを観測した上で行われる仮定の命題や陳述に過ぎません。

我々はまず、母集団に関するサンプルデータを元に、2つの相互に排他的な仮定を行います。

1つ目は__帰無仮説(null仮説)__と呼ばれ、`H0`で表されます。

2つ目は __対立仮説__ と呼ばれ、`H1`もしくは`Ha`で表されます。帰無仮説に対立するものとして用いられます。

母集団のデータに基づいて帰無仮説を受け入れるか否かを決定し、それに対応して対立仮説を否定するか受け入れるかを決めることになります。

#### 有意水準

有意水準とは、帰無仮説を受け入れるか否定するかを決定する上で考慮する程度を指します。母集団における仮説を考慮するとき、100%、つまり全ての例が仮説に従うということは(ほぼ)ありません。
そのため、__有意水準を裾切り(カットオフ)する程度__と定めます。例えば、有意水準5%というと、(100-5)% = 95%のデータが仮定に従えば仮説を受け入れる、という具合です。

__ 95%の信頼度で仮説を受け入れる __、と表現されます。

![曲線](https://i.stack.imgur.com/d8iHd.png)

棄却されない領域は、__採択域またはβ領域__ と呼ばれます。棄却領域は__危険域またはα領域__と呼ばれます。α領域は、__有意水準__ を表しています。

有意水準を5%とすると、2つのα領域には母集団の(2.5+2.5)%があり、β領域には95%が存在することになります。

採択と棄却には2種類の誤りが生じます。

Type-I Error:__ NULL 仮説は真であるが、誤って棄却された場合。

Type-II Error:__ NULL 仮説が偽であるにもかかわらず,誤って受け入れてしまった場合。

![仮説](https://microbenotes.com/wp-content/uploads/2020/07/Graphical-representation-of-type-1-and-type-2-errors.jpg)

### 仮説検定

__片側検定__:

![片側](https://prwatech.in/blog/wp-content/uploads/2019/07/onetailtest.png)

仮説検定の一つで、棄却領域がサンプリングの分布の片方側にしかないものを言います。棄却領域は左右どちら側でも構いません。

考え方としては、有意水準を5%とし、「クラスの男子の身長は6フィート未満」という仮説を考えてみます。母集団の5%が6フィート以上であれば、その仮説は正しいと考えます。つまり、検定条件が片側の尾端(身長が6フィート以上の尾端)だけを制限するので、これは片側検定と言えます。

![両側](https://i0.wp.com/www.real-statistics.com/wp-content/uploads/2012/11/two-tailed-significance-testing.png)

両側検定は、棄却領域がデータ分布の両端にある場合です。

考え方としては、有意水準を5%とし、「あるクラスの男子の身長は6フィートではない」という仮説を考えたとします。

ここでは,母集団の5%以上が6フィート未満またはそれより上であれば,NULL仮説を受け入れることができます。つまり棄却領域は両端にあり、その領域は分布の両端で5% / 2 = 2.5%であることがわかります。

## 17_ p値

P値について説明する前に、Z検定というもう一つの重要な概念についてまず説明する必要があるでしょう。

### Z検定

__母集団__と__標本(サンプル)__という2つの言葉を知る必要があります。

__母集団__とは、利用可能な分布データ全体を表します。つまり、提供されているデータセットのレコード全体を指します。

__標本(サンプル)__とは母集団もしくは特定の分布から無作為に抽出されたデータ点のグループを指します。 標本のサイズはデータ点から任意の数値を選ぶことができ、__標本数(サンプルサイズ)__と呼ばれます。

__Z検定__は特定の標本分布が特定の母集団に属するかどうかを決定づけるために用いられます。

さて、Z検定を行うにあたり、標準化された比較方法として__標準正規分布__を用いる必要があります。

![std1](https://miro.medium.com/max/700/1*VYCN5b-Zubr4rrc9k37SAg.png)

これまで説明した通り、標準正規形とは、平均値=0、標準偏差=1の正規形のことです。

また __標準偏差__ は平均からどれだけ点が離れているかを示す指標を表します。

![std2](https://miro.medium.com/max/640/1*kzFQaZ08dTjlPq1zrcJXgg.png)

これは、データの約68%、95%、99.7%が、それぞれ正規分布の1、2、3の標準偏差内に収まっているというものです。

さて、正規分布を標準正規分布に変換するには、Z値(Z-score)と呼ばれる標準スコアが必要です。それは次のように与えられます。

![Z-score](https://miro.medium.com/max/125/1*X--kDNyurDEo2zKbSDDf-w.png)

x = 標準化したい値

µ = x の分布の平均値

σ = xの分布の標準偏差

もう一つの概念 __中央極限定理__ についても知っておく必要があります。

##### 中心極限定理(Central Limit Theorem)

__中心極限定理は、サンプルサイズが30より大きいとき、母集団の分布に関わらず、サンプル平均の分布の平均は母集団の平均に等しいことを示します。__

そして、 __サンプル平均の分布は、正規分布に従います。__

つまり、サンプルサイズが30以上の分布からいくつかのサンプルを選び、その中から静的なサンプルの平均を選び、それらを使って分布を作成すると、新しく作成されたサンプリング平均の分布の平均は、元の母集団の平均と等しくなるということです。

定理により、母平均μ、母標準偏差σの母集団から、大きさNのサンプルを抽出すると、次のことが成り立ちます。

![std3](https://miro.medium.com/max/121/0*VPW964abYGyevE3h.png)

つまり,サンプル平均の分布の平均値は,サンプル平均と等しいのです。

サンプル平均値の標準偏差は次のように与えられます。

![std4](https://miro.medium.com/max/220/0*EMx4C_A9Efsd6Ef6.png)

上記の項は、標準誤差とも呼ばれます。

上述の理論をZ検定に利用します。標本の平均値が母集団の平均値に近ければ、その標本は母集団に属していると言えて、母平均から離れている場合は、そのサンプルは別の集団から採取されたものであると言えます。

これを行うには、数式を使用して、z統計量が1.96より大きいか小さいかを確認します(両側検定、有意水準 = 5%とする)。

![los](https://miro.medium.com/max/424/0*C9XaCIUWoJaBSMeZ.gif)

![std5](https://miro.medium.com/max/137/1*DRiPmBtjK4wmidq9Ha440Q.png)

上の式は、Z統計量を与えます。

z = Z統計量

X̄ = サンプル平均

μ = 母集団の平均

σ = 母集団の標準偏差

n = サンプルサイズ

Zスコアは分布の標準化に使われるので、データが全体的にどのように分布しているかを知ることができます。

### P値

定めた有意水準に基づいて、結果が統計的に有意であるかどうかを確認するために使用されます。

例えば、ある実験を行い、結果やデータを収集したとします。
ここで、第一の仮説(NULL仮説、帰無仮説)と、それに反する第二の仮説(対立仮説)を立てます。

そして、帰無仮説のしきい値となる有意水準を決めます。P値は、仮説の起きる確率を表しています。例えば対立仮説のP値が0.02の場合、対立仮説が起こる確率が2%であることを意味します。

さて、2%のp値や0.02のp値を許容できるかどうかは、有意水準にかかっています。これは、帰無仮説を支持するレベルと言えます。両側検定を用いて有意水準が5%の場合、分布の両端で2.5%を許容できるなら、有意水準>対立仮説のp値として、NULL仮説を受け入れます。

しかし、p値が有意水準より大きければ、その結果は __統計的に有意であるとし、NULL仮説を棄却します__ 。

参考資料:

1. https://medium.com/analytics-vidhya/everything-you-should-know-about-p-value-from-scratch-for-data-science-f3c0bfa3c4cc

2. https://towardsdatascience.com/p-values-explained-by-data-scientist-f40a746cfc8

3.https://medium.com/analytics-vidhya/z-test-demystified-f745c57c324c

## 18_ カイ二乗検定

カイ(χ)二乗検定は、データサイエンスや機械学習の問題で、特徴量の選択のために広く使われているものです。

カイ二乗検定は、統計学において2つの事象の独立性を検定するために用いられており、つまり使用する特徴量の独立性を確認するために使用されます。
しばしば、多くの情報を伝えないが、特徴空間に次元を追加するばかりの依存する特徴量が使用されてしまっているのです。

この検定は、2つ以上のカテゴリー変数の関係を調べる最も一般的な方法の1つです。

カイ二乗統計量 - χ2と呼ばれる数値が「期待値と観測値の差の合計を観測値で割った値」として与えられ、これはカイ二乗分布に従います。

![カイ二乗](https://miro.medium.com/max/266/1*S8rfFkmLhDbOz4RGNwuz6g.png)

参考資料:

[定義](investopedia.com/terms/c/chi-square-statistic.asp)

[ガイド1](https://towardsdatascience.com/chi-square-test-for-feature-selection-in-machine-learning-206b1f0b8223)

[ガイド2](https://medium.com/swlh/what-is-chi-square-test-how-does-it-work-3b7f22c03b01)

[操作例](https://medium.com/@kuldeepnpatel/chi-square-test-of-independence-bafd14028250)

## 19_ 推定

## 20_ 信頼区間(Confidence Interval, CI)

## 21_ 最尤推定(Maximum Likelihood Estimation, MLE)

## 22_ カーネル密度推定(Kernel Density Estimation, KDE)

統計において、カーネル密度推定(kernel density estimation, KDE) は確率変数の確率密度関数を推定するノンパラメトリックな方法を指します。
カーネル密度推定は、有限のデータサンプルに基づいて母集団に関する推論を行う基本的なデータの平滑化の問題です。

カーネル密度推定は、確率分布を表すもう一つの方法ととらえることもできます。

![KDE1](https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Kernel_density.svg/250px-Kernel_density.svg.png)

主に3つのカーネル関数が使われます。

1. ガウシアン

2. 矩形

3. 三角形

カーネル関数は、データポイントが見つかる確率を表しています。
つまり、中心部で最も高く、点から離れるにつれて低くなります。

全てのデータポイントにカーネル関数を割り当て、最終的に関数の密度を計算し、分割されたデータポイントの密度推定値を得ることができます。実際には、特定軸の特定の点におけるカーネル関数の値を加算します。
以下のように示されます。

![カーネル密度関数 2](https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Comparison_of_1D_histogram_and_KDE.png/500px-Comparison_of_1D_histogram_and_KDE.png)

カーネル関数は以下のように与えられます。

![カーネル密度関数 3](https://wikimedia.org/api/rest_v1/media/math/render/svg/f3b09505158fb06033aabf9b0116c8c07a68bf31)

ここで、Kはカーネル(非負の関数)、h>0はバンド幅と言われる平滑化のパラメータです。

'h' (バンド幅)は曲線を変化させるパラメータです。

![カーネル密度関数 4](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Comparison_of_1D_bandwidth_selectors.png/220px-Comparison_of_1D_bandwidth_selectors.png)

標準正規分布から100点の無作為に抽出したサンプルのバンド幅を様々に変更した際のカーネル密度関数(KDE)です。

灰色:が標準正規分布における真の密度,

赤色:h=0.05

黒色: h=0.337

緑色: h=2

参考資料:

[基礎](https://www.youtube.com/watch?v=x5zLaWT5KPs)

[応用](https://jakevdp.github.io/PythonDataScienceHandbook/05.13-kernel-density-estimation.html)

## 23_ 回帰

回帰とは、 __独立した変数__ のセットから __依存した変数__ の値を予測するものです。

例えば、自動車の価格を予測したいとします。車の価格を従属変数Yとし、エンジン容量、最高速度、クラス、会社などの特徴量を独立変数とします。 これらの変数を使って価格を得るための方程式を組みます。

たとえばyがxという特徴量に線形に依存するとき、mを係数、cを切片またはバイアスとして __y=mx+c__ と表現することができます。

下記が回帰の種類を表しています。

![回帰の種類](https://miro.medium.com/max/2001/1*dSFn-uIYDhDfdaG5GXlB3A.png)

[回帰の手引](https://towardsdatascience.com/a-deep-dive-into-the-concept-of-regression-fb912d427a2e)

## 24_ 共分散

### 分散

データセットがどれだけ散らばっているか、広がっているかの指標を分散と呼びます。分散が0であると、それはすなわち全てのデータセットが同じ値であることを意味します。分散が「小さい」というとき、データ間の差が少ないことを意味します。逆に分散が「大きい」とき、データセットのデータは大きく異なることを意味します。

数学的には、データセット内の各値が平均値からどれだけ離れているかを表します。

分散(Σ^2)は各データ点の平均からの距離の2乗をデータ点の数を割った値で表されます。

![数式](https://cdn.sciencebuddies.org/Files/474/9/DefVarEqn.jpg)

### 共分散

共分散は、2つの確率変数の間の関連性の度合いをはかる概念です。確率変数は分布を作ることが知られています。分布は変数が取りうるデータ点の値の集合で、これはベクトル空間において簡単にベクトルで表すことができます。

共分散は2つのベクトルのドット積として定義されます。共分散の値は、+∞〜-∞まで変化します。2つの分布、もしくはベクトルが同じ方向に伸びる場合、共分散は正であり、逆方向に伸びる場合は共分散は負の値になります。符号は変動の方向を示し、大きさは変動の量を示すということです。

共分散は下記のように与えられます。

![cov_form](https://cdn.corporatefinanceinstitute.com/assets/covariance1.png)

ここで,X_iとY_iは2つの分布のi番目の点を表し,X-barとY-barは両方の分布の平均値を表し,nは分布のデータポイントの数を表します。

## 25_ 相関

「共分散」は、変数の総合的な関係性を方向・大きさの両方で測定するものです。「相関」は、共分散を尺度化したものです。これは無次元の値で、単位に依存しません。両変数の関連の強さを示すだけです。

数学的には、分布をベクトルで表現すると、相関はベクトル間の余弦(コサイン)となります。相関の値は、+1から-1まで変化します。+1は強い正の相関、-1は強い負の相関と言われています。0は無相関、つまり2つの変数が互いに独立であることを意味します。

相関は次のように与えられます。

![corr](https://cdn.corporatefinanceinstitute.com/assets/covariance3.png)

ここで、

ρ(X,Y) – 変数Xと変数Yの相関

Cov(X,Y) – 変数Xと変数Yの間の共分散

σX – 変数Xの標準偏差

σY – 変数Yの標準偏差

標準偏差は分散の平方根で与えられます。

## 26_ ピアソン係数

## 27_ 因果関係

## 28_ Least2-fit

## 29_ ユークリッド距離

ユークリッド距離は、2点間の距離を測るのに最もよく使われている標準的な単位でm2つの点の座標値の差の二乗和の平方根として与えられます。

ユークリッド距離は、2つの点の座標値の差の二乗和の平方根として与えられます。

ユークリッド空間における2点間のユークリッド距離は、2点間の線分の長さを表す数値です。点のデカルト座標からピタゴラスの定理(三平方の定理)を用いて計算でき、ピタゴラス距離と呼ばれることもあります。

__ユークリッド平面上で、点pを直交座標(p_{1},p_{2})、点qを座標(q_{1},q_{2})とします。このとき、pとqの間の距離は次のようになります。

![eucladian](https://wikimedia.org/api/rest_v1/media/math/render/svg/9c0157084fd89f5f3d462efeedc47d3d7aa0b773)

# 3_ プログラミング

## 1_ Pythonの基礎

### 概要

Pythonは高レベルなプログラミング言語の1つで、データサイエンスを含む様々なプロジェクトに用いられています。

[Python](https://www.python.org/) で使える膨大な量のライブラリが既に存在し、素早く何かを実装するのに適しています。

多くの情報システムがPythonをサポートしており、特に何かをインストールしなくても使用可能な場合がほとんどです。

### スクリプトの実行

* .pyファイルをコンピュータにダウンロードします
* Make it executable (_chmod +x file.py_ on Linux)
* (_chmod +x file.py_ コマンドをlinuxで実行するなどして)ファイルを実行可能にします
* Terminalアプリを開き、pythonファイルが存在するディレクトリに移動します
* _python file.py_ でファイルを実行します

## 2_ excelの取り扱い

## 3_ Rのセットアップ/ R studio

### 概要

Rは、統計や数学的な可視化に特化したプログラミング言語です。

Terminalを使って手動でスクリプトを作成したり,Rコンソールで直接操作したりすることができます。

### インストール方法

#### Linux

sudo apt-get install r-base

sudo apt-get install r-base-dev

#### Windows

Download the .exe setup available on [CRAN](https://cran.rstudio.com/bin/windows/base/) のウェブサイトからセットアップ用の.exeをダウンロードしてください。

### R-studio

RstudioはRのための視覚的インタフェースです。無料で[their website](https://www.rstudio.com/products/rstudio/download/)から利用することができます。

R studioは4つの主なエリアに分かれています。

![rstudio](https://owi.usgs.gov/R/training-curriculum/intro-curriculum/static/img/rstudio.png)

* 左上は作業中のスクリプトです(実行したいコードをハイライトして Ctrl + Enter を押して実行してください)。
* 左下は、コードの一部の行を即時実行するためのコンソールです。
* 右上は、あなたの環境(変数、履歴など)を表示しています。
* 右下は、あなたがプロットした図、パッケージ、ヘルプ、コード実行の結果などを表示しています。

## 4_ Rの基礎

Rは、統計計算とグラフィックスのためのオープンソースのプログラミング言語およびソフトウェア環境であり、R Foundation for Statistical Computingによってサポートされています。

R言語は、統計ソフトの開発やデータ分析のために、統計学者やデータマイナーの間で広く使用されています。

データマイナーへのアンケート、学術文献データベースの調査などによると、Rの人気は近年大幅に上昇しています。

## 5_ Expressions

## 6_ 変数

## 7_ IBM SPSS

## 8_ Rapid Miner

## 9_ ベクトル

## 10_ 行列

## 11_ 配列

## 12_ 因子(ファクタ)型

## 13_ リスト型

## 14_ データフレーム

## 15_ CSVデータの読み込み

CSVはデータサイエンスで一般に用いられる__表データ__の形式です。構造化されたデータのほとんどはこの形式になります。 CSVファイルをPythonで開くときは、下記のように他のファイルと同様に開くことができます。

raw_file = open('file.csv', 'r')

* 'r': 読み込み(Reading), ファイルに変更を加えることはできません。
* 'w': 書き込み(Writing), 変更を加えれば元のファイルは消去されます。
* 'a': 追記(Adding), 変更はファイルの末尾に加えられます。

### どう読めばいいのですか?

ほとんどの場合、1行ずつ読み込んで、その行に何らかの操作を行うことになるでしょう。後で使いたい場合は、リストや辞書型にデータを保存しておくことになります。

そのように1行ずつCSVファイルを読み込みたい場合は、下記のライブラリを使うことができます。

* Python [csvライブラリ](https://docs.python.org/3/library/csv.html)
* Python [open関数](https://docs.python.org/2/library/functions.html#open)

## 16_ データの読み込み

## 17_ データのサブセット化

## 18_ データフレームの操作

## 19_ 関数

関数は、冗長な操作を実行する際に役立ちます。

まず、下記のように関数を定義しましょう。

def MyFunction(number):
"""この関数は数字に9を掛けて返却します。"""
number = number * 9
return number

## 20_ 因子分析

## 21_ パッケージのインストール

Pythonには、Python2とPython3という大きく2つのディストリビューションがあります。

### pipのインストール

PipはPython用のライブラリマネージャです。pipを使うとほとんどのパッケージをたった1行のコマンドで簡単にインストールできるようになります。 pipをインストールするには下記のようにしてください。

# __python2__
sudo apt-get install python-pip
# __python3__
sudo apt-get install python3-pip

[pip](https://pypi.python.org/pypi/pip?)を使ったライブラリのインストールはターミナルなどで下記のように行うことができます。

# __python2__
sudo pip install [PCKG_NAME]
# __python3__
sudo pip3 install [PCKG_NAME]

coreから直接パッケージをインストールすることもできます。(詳しくは21_install_pkgs.pyを参照してください)

# 4_ 機械学習(Machine Learning, ML)

## 1_ 機械学習とは?

### 定義

機械学習は人工知能の研究の一部です。古典的なアルゴリズムでは解くことがほぼ不可能な困難な課題を、
コンピュータを用いて解決するための洗練された実装を作ることを目的としています。

機械学習は主に3つのアルゴリズム群からできています。

![機械学習(ML)](https://miro.medium.com/max/561/0*qlvUmkmkeefqe_Mk)

### 実用例

* コンピュータ・ビジョン
* 検索エンジン
* 財務分析
* 文書の分類
* 音楽生成
* ロボティクス など

## 2_ 数値変数

数値変数は、連続する整数や実数をとることができる変数です。無限の値をとりうることができます。

このタイプの変数は何らかの計測結果である特徴量のために使われます。例えば、クラスの生徒全員の身長、のようなものです。

## 3_ カテゴリ変数

カテゴリ変数は、有限の離散値をとる変数です。データ項目を分類するために、固定された値の集合をとります。

それらは、割り当てられたラベルのように動作します。
例えば 性別に応じてクラスの学生をラベリングするときは '男性'と'女性'を取りうるカテゴリ変数を作るでしょう。

## 4_ 教師付き学習

__ラベル付けされた学習データ__ から、推測を行う実装を作る機械学習のことを教師付き学習と呼びます。

訓練データは、標本のセットで構成されています。

教師付き学習では、各訓練データは、入力オブジェクト(通常はベクトルデータ)と望ましい出力値(教師信号とも呼ばれる)からなるペアです。

教師付き学習アルゴリズムは、学習データを分析して、新しいデータが入ってきたときにその望ましい出力値にマッピングするための推論関数を生成します。

別の言い方で表現してみましょう。

教師付き学習では、ラベル付きのデータセットから学習します。教師付き学習モデルは、標本とラベルから、標本を記述するために使用される特徴量の相関関係を見つけ、各特徴量が標本に対応するラベルにどのように寄与するかを学習しようとします。見たことのないデータを受け取ったときに、教師付き学習の目標は、その特徴量に基づいて正しくラベルを付けることです。

正しいシナリオがあれば、アルゴリズムは初見のデータのラベルを正しく決定することができます。

## 5_ 教師なし学習

教師なし機械学習とは、__"ラベルなし" のデータ__から、隠れた構造を見つけ出すための関数を推論する機械学習です。(分類やカテゴライズが観測データに含まれていません)。

学習器に与えられた例はラベル付けされていない(望ましい結果が何か分からない)ので、関連するアルゴリズムによって出力された構造の正確さを評価することができません。これが、教師付き学習や強化学習と教師なし学習との違いです。

教師なし学習では、データ標本のみを扱います。特徴量の類似性に基づいてデータをグループ化し、クラスターを形成しようと試みます。2つの標本が類似した特徴を持ち、特徴空間内で近接して配置される場合、2つのインスタンスが同じクラスタに属する可能性が高くなります。初見のデータを取得すると、アルゴリズムは、その特徴に基づいて、標本がどのクラスタに属するべきかを見つけようと試みるのです。

参考資料:

[教師なし学習の手引](https://towardsdatascience.com/a-dive-into-unsupervised-learning-bf1d6b5f02a7)

## 6_ 概念、入力値、性質

機械学習の問題は、データセットの特徴量を入力として取り込みます。

教師付き学習では、モデルが訓練データを用いて訓練を行って初めて利用可能な状態になります。そのため、教師付き学習ではモデルに学習させるために、特徴量とは別に各データ点に対応するラベルをあらかじめ入力する必要があります。

一方、教師なし学習では、モデルはデータ項目間の関係を用いてグループ化するだけで実行されます。そのため教師なし学習では、ラベル付きのデータセットは必要ありません。データセットの特徴量だけが入力となります。

## 7_ 訓練データとテストデータ

あるデータセットを使って教師付き機械学習モデルを学習すると、モデルはその特定のデータセットの依存性を非常に深く捉えます。そのため、モデルは常にデータ上で良い性能を発揮しますが、モデルの性能を正しく測ることはできません。

モデルの性能を知るためには、異なるデータセットでモデルを訓練し、テストする必要があります。モデルを訓練するデータセットを「トレーニングセット」、モデルをテストするデータセットを「テストセット」と呼びます。

通常、提供されたデータセットを分割して、トレーニングセットとテストセットを作成します。分割の比率はデータによって3:7または2:8といった程度で、大きい方が訓練データとして使われることが多いです。

#### データの分割には sklearn.model_selection.train_test_split を使うことができます。

文法:

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)

[Sklearnの資料](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html)

## 8_ 分類器(Classifier)

分類は最も重要で一般的な機械学習の問題です。分類問題には、教師ありの問題と教師なしの問題があります。

分類問題では、特定のデータポイントに対応する特徴セットに基づいて、データポイントを特定のクラスに属するようにラベル付けすることを行います。このために、深層学習を含む機械学習技術を用いて実行することができます。

分類にはロジスティック回帰、SVM、分類木といった種類があり、分類を行うための機械学習モデルは分類器(classifier)と呼ばれます。

## 9_ 予測

機械学習モデルが特定の問題に対して生成する出力を「予測(prediction)」といいます。

予測には、大きく分けて2種類の問題に対応するものがあります。

1. 分類

2. 回帰

分類では、ほとんどの場合データポイントが属するクラスまたはラベルを予測します。

回帰では、予測値は連続的な数値です。例えば、家の価格を予測する場合などです。

## 10_ リフト(Lift)

## 11_ 過学習

多くの場合、モデルを訓練しすぎたり、モデルを複雑にしすぎたりして、モデルが訓練データに適合しすぎてしまうことがあります。

訓練データには、外れ値が含まれていたり、データの誤解を招くようなパターンが含まれていることもよくあります。このような不規則性を持つ訓練データを深くモデルにフィットさせると、モデルの汎化能力が失われてしまいます。このモデルは、訓練セットでは非常に良い性能を発揮しますが、テストセットではそれほど良い性能を出しえません。

![過学習](https://hackernoon.com/hn-images/1*xWfbNW3arf39wxk4ZkI2Mw.png)

ある点を超えて訓練すると,訓練における誤差が減少し、テストでの誤差は増加することがわかります。

訓練データ上ではh1よりも多くの誤差を与え、テストデータ上ではh1よりも少ない誤差しか与えない別の仮説hが存在するとき、仮説h1は「過学習している」と言われます。

## 12_ バイアスと分散

バイアスとは、モデルの予測値の平均と、予測しようとしている正しい値との差のことです。バイアスの高いモデルは、トレーニングデータにほとんど注意を払っておらず、モデルを単純化しすぎています。そのため、訓練データやテストデータで高い誤差が生じます。

分散とは、あるデータポイントに対するモデル予測のばらつき、またはデータの広がりを示す値です。分散が大きいモデルは、トレーニングデータに多くの注意を払っており、初めて見るデータに対しては一般化しません。その結果、訓練データでは非常に良い性能を発揮しますが、テストデータでは高い誤差となります。

基本的に分散が大きいとオーバーフィッティング(過学習)になり、偏りが大きいとアンダーフィッティング(学習不足)になりがちです。モデルが完璧に機能するためには、バイアスと分散が低いことが望まれ、高分散で高バイアスのモデルは避ける必要があります。

![バイアスと分散](https://community.alteryx.com/t5/image/serverpage/image-id/52874iE986B6E19F3248CF?v=1.0)

低バイアス、低分散の場合、我々のモデルは全てのデータポイントを精確に予測していることがわかります。最後の画像では、高バイアスと高分散の場合、モデルはどのデータポイントも精確に予測できていないことが分かります。

![バイアスと分散2](https://adolfoeliazat.com/wp-content/uploads/2020/07/Bias-Variance-tradeoff-in-Machine-Learning.png)

このグラフから、複雑すぎるモデルや単純すぎるモデルでは、誤差が大きくなることがわかります。偏り(バイアス)はモデルが単純なほど大きくなり、分散はモデルが複雑なほど大きくなります。

これは、機械学習において最も重要なトレードオフの一つです。

## 13_ 木構造と分類

ここまで、分類についてお話しました。最も使用されている手法は、ロジスティック回帰、SVM、決定木であることがわかりました。クラスの境界が線形な場合はロジスティック回帰やSVMなどの手法が最も適していますが、境界が非直線的な場合は、決定木がよく使用されます。

![木](https://www.researchgate.net/profile/Zena_Hira/publication/279274803/figure/fig4/AS:324752402075653@1454438414424/Linear-versus-nonlinear-classification-problems.png)

最初の画像は線形な境界、2番目の画像は非線形な境界を示しています。

非線形な境界のとき、決定木ベースのアプローチは、分類に非常に有効です。このアルゴリズムは、決定を導くための条件をベースにしているので、関数に依存しません。

![木2](https://databricks.com/wp-content/uploads/2014/09/decision-tree-example.png)

決定木による分類のアプローチ

## 14_ 分類率

## 15_ 決定木

決定木(Decision Trees)は、機械学習アルゴリズムの中でも最も利用されているものの一つで、分類と回帰のどちらにも使用されます。線形データと非線形データの両方に使用することができますが、主に非線形データに使用されます。決定木はその名が示すように、データとその挙動から導き出された一連の判断を行います。線形分類器や回帰を使用しないため、その性能はデータの線形性には依存しません。

木モデルを使用する他の最も重要な理由の1つは、解釈が非常に容易であることです。

決定木は、分類と回帰の両方に同じ原理で使用することができますが、やり方は少し異なります。CARTアルゴリズム(Classification and Regression Trees)を使用します。

参考資料:

[決定木への手引](https://towardsdatascience.com/a-dive-into-decision-trees-a128923c9298)

## 16_ ブースティング

#### アンサンブル学習

複数のモデルや弱い学習者を組み合わせることで、機械学習モデルの性能、有効性を向上させるための手法です。

アンサンブル学習には2種類のタイプがあります。

__1. 並列アンサンブル学習法またはバギング法___。

__2. 逐次アンサンブル学習法(ブースティング法)__。

並列/バギング法では,複数の弱い分類器が並行して作成されます。また、学習データセットは元のデータセットからブートストラップベースでランダムに作成されます。学習段階と作成段階で使用されるデータセットは弱い分類器です。その後、予測の際にはすべての分類器からの結果がバギングされ、最終的な結果を得るために用いられます。

![bag](https://miro.medium.com/max/850/1*_pfQ7Xf-BAwfQXtaBbNTEg.png)

Ex: ランダムフォレスト

追加学習やブースティングにおいて、弱い識別機が次から次に作られます。
作る仮定では、 前の識別機が誤った推測に次の識別機がフォーカスするようにサンプルのデータセットが重み付けされていきます。
そうやって、各ステップにおいて分類器は前回の誤りや誤分類を使って改善・学習を行うのです。

![ブースティング](https://www.kdnuggets.com/wp-content/uploads/Budzik-fig2-ensemble-learning.jpg)

ブースティングのアルゴリズムには主に3つの種類があります。

__1. Adaboost(アダブースト)__

__2. Gradient Boosting(勾配ブースティング)__

__3. XGBoost(eXtreme Gradient Boosting, XGブースティング)__

__アダブースト__ は以下のように動作します。
まず弱い識別機(スタンプと呼ばれます)と作り、これは完成した決定木ではなく分類が終わったことに基づいた単一ノードを含みます。
誤分類が観測されると、スタンプは次の弱学習器を学習させる際に正しく分類されたものよりも重み付けされるのです。

実際のデータを分類するアプリケーションをpythonで作る際には、__sklearn.ensemble.AdaBoostClassifier__ が使えます。

![adaboost](https://ars.els-cdn.com/content/image/3-s2.0-B9780128177365000090-f09-18-9780128177365.jpg)

参考資料:

[Understanding](https://blog.paperspace.com/adaboost-optimizer/#:~:text=AdaBoost%20is%20an%20ensemble%20learning,turn%20them%20into%20strong%20ones.)

__勾配ブースティング__ アルゴリズムは 出力が0.5となるノードからはじめ、分類と回帰を行います。そのノードが最初のスタンプ/弱分類器として働きます。
そして、予測の誤差を見て他の学習器や決定木を作成し、条件に基づいて実際に誤差を予測します。この誤差を「残差」と呼びます。最終的な出力は以下のようになります。

__0.5 (最初の学習器からの出力) + 2番目のツリーまたは学習者が提供した誤差__

さて、この方法を使うと、予測値をきっちり学習しすぎてしまい、汎化性が失われてしまいます。それを避けるために、勾配ブースティングでは、学習パラメータ_α_を使用します。

さて、2つの学習器を使った最終的な結果は次のように得られます。

0.5 (最初の学習器からの出力) + _alpha_ X (2番目のツリーまたは学習器からの出力誤差)__。

追加された部分を使用することで、正しい結果に向けて少しずつ進歩していることがわかります。その後も学習器を追加していき、訓練セットから得られる実際の値に近くなるまで続けます。

全体として、この式は次のようになります。

_0.5 (最初の学習器からの出力)+ _α_ X (2番目のツリーまたは学習器からの出力誤差)+ _α_ X (3番目のツリーまたは学習器からの出力誤差)+.............__

勾配ブースティングをpythonで行う際は、 __sklearn.ensemble.GradientBoostingClassifier__ を使うことができます。

![GBM](https://www.elasticfeed.com/wp-content/uploads/09cc1168a39db0c0d6ea1c66d27ecfd3.jpg)

参考資料:

[勾配ブースティングの手引](https://medium.com/mlreview/gradient-boosting-from-scratch-1e317ae4587d)

## 17_ 単純ベイズ(Naïves Bayes)分類器

単純ベイズ(ナイーブベイズ, Naive Bayes)は、__ベイズ理論__ を基礎とした一連の分類アルゴリズムです。

ベイズ理論は事象の起きる確率を、事象に関連する条件の事前知識を元に表現したものであり、下記のように表されます。

![bayes](https://wikimedia.org/api/rest_v1/media/math/render/svg/87c061fe1c7430a5201eef3fa50f9d00eac78810)

ここで `P(A|B)` はBが既に起きたと知っている状態におけるAが起きる確率で、`P(B|A)` はAが既に起きたと知っている状態におけるBが起きる確率を指します。

[Scikit-learnの手引](https://github.com/abr-98/data-scientist-roadmap/edit/master/04_Machine-Learning/README.md)

ナイーブベイズには主に2つのタイプがあります。

__1. ガウシアンナイーブベイズ(Gaussian Naive Bayes)__

__2. 多項分布ナイーブベイズ(Multinomial Naive Bayes)__

#### 多項分布ナイーブベイズ(Multinomial Naive Bayes)

この手法は主に書類の分類に用いられます。
例えば、ある記事がスポーツに関するものか映画雑誌に関するものか、といった分類です。
メールがスパムかどうかを判別することにも使われたりします。決定を行うために、異なる雑誌の単語の出現頻度のデータを使用しているのです。

例えば、"Dear" "friends"といった言葉がメールではよく使われるのに対し、スパムメールでは"offer" "money"といった言葉が多く使われる傾向にあるといったことです。

そのようにして、登場する単語を使ってメールがスパムである確率を計算するのです。

#### ガウシアン・ナイーブ・ベイズ(Gaussian Naive Bayes, GNB)

予測変数が連続的な値を取り、離散的でない場合、これらの値はガウス分布(=正規分布)からサンプリングされていると仮定します。

![ガウシアンナイーブベイズ](https://miro.medium.com/max/422/1*AYsUOvPkgxe3j1tEj2lQbg.gif)

そうやって、正規分布とベイズ理論をリンクさせます。

参考資料:

[手引](https://youtu.be/H3EjCKtlVog)

## 18_ K近傍法(K-Nearest neighbor)

K-nearest neighbourアルゴリズムは、最も基本的であり、今日でも不可欠なアルゴリズムです。モデルベースではなく、メモリーベースのアプローチです。

KNNは、教師付き学習と教師なし学習の両方で使用されます。このアルゴリズムは、単純に特徴空間内のデータポイントの位置を特定し、「距離」を類似性の指標として使用します。特徴空間中でテストデータに最も似ているデータを探すアルゴリズムです。

2つのデータポイント間の距離が小さいほど、そのポイントはより類似しているとみなされます。

K近傍アルゴリズムでは、分類したい点を特徴空間上にプロットし、最も近いK個の近傍クラスに分類します。Kはユーザーから入力されるパラメータで、当該点のラベルを決定する際に、何点を用いるかという指標です。Kが1より大きい値のとき、多数派のラベルを特定するということです。

データセットが非常に大きい場合には、大きなKを使用して境界を生成することができます。データセットが小さい場合は、もちろん小さなKの値を使用しなければいけません。

![knn](https://www.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/46117/versions/4/screenshot.jpg)

参考資料:

[ガイド](https://towardsdatascience.com/machine-learning-basics-with-the-k-nearest-neighbors-algorithm-6a6e71d01761)

## 19_ ロジスティクス回帰

「回帰」は機械学習において最も重要なコンセプトの1つです。

[回帰への手引](https://towardsdatascience.com/a-deep-dive-into-the-concept-of-regression-fb912d427a2e)

ロジスティクス回帰は最も使用されている分類アルゴリズムで、データポイントを線形に分離するために用いられます。また、このアルゴリズムは従属変数が分類分けされている場合に使用されます。

下記の線形回帰方程式を用います。

__Y= w1x1+w2x2+w3x3……..wkxk__

下記のようにも表せます。

__Y= 1/ 1+e^-(w1x1+w2x2+w3x3……..wkxk)__

下記のように表せば、値が0から1の間に収まることを保証でき、分類アルゴリズムとして使いやすくなります。

上記の方程式は __シグモイド(Sigmoid)__ 関数と呼ばれ、 下記のようになります。

![Logreg](https://miro.medium.com/max/700/1*HXCBO-Wx5XhuY_OwMl0Phw.png)

そして、この損失関数はLog損失(Log Loss)もしくは二値分類用の交差エントロピー(binary cross-entropy)と呼ばれます。

__Loss= —Y_actual. log(h(x)) —(1 — Y_actual.log(1 — h(x)))__

Y_actual=1のとき1つ目の部分が誤差を出し、そうでないときは2つ目が誤差を出します。

![損失](https://miro.medium.com/max/700/1*GZiV3ph20z0N9QSwQTHKqg.png)

ロジスティック回帰はマルチクラス分類にも使われます。ソフトマックス回帰またはOne vs All ロジスティック回帰を使用します。

[ロジスティクス回帰の手引](https://towardsdatascience.com/logistic-regression-detailed-overview-46c4da4303bc)

pythonでロジスティクス回帰を使用するときは、 __sklearn.linear_model.LogisticRegression__ を使うことができます。

## 20_ ランク付け

## 21_ 線形回帰

回帰タスクは、一連の独立変数(提供された機能)から従属変数の値を予測するものです。例えば、自動車の価格を予測したいとします。そこで、Yという従属変数となり、エンジン容量、最高速度、クラス、会社などの特徴が独立変数となり、価格を求める方程式を組み立てるのに役立ちます。

従属変数Yがxに線形に依存している場合、y=mx+cで与えられます。MとCはともにモデルのパラメータです。

ここでは、平均二乗誤差(Mean Square Error, MSE)という損失関数またはコスト関数を使用します。これは、実際の値と予測値の差の二乗で与えられます。

__MSE=1/2m * (Y_actual — Y_pred)²__

この関数をよく見ると、放物線を描いていることがわかります。この関数は凸関数です。この凸関数は、勾配降下法でモデルパラメータの値を得るために使用される原理です。

![損失](https://miro.medium.com/max/2238/1*Xgk6XI4kEcSmDaEAxqB1CA.png)

上の画像は損失関数の様子を示しています。

モデルパラメータの精確な予測値を得るために、 __勾配降下法__ を用います。

[勾配降下法の手引き](https://towardsdatascience.com/an-introduction-to-gradient-descent-and-backpropagation-81648bdb19b2)

[線形回帰の手引](https://towardsdatascience.com/linear-regression-detailed-view-ea73175f6e86)

pythonで線形回帰を行いたいときは、 __sklearn.linear_model.LinearRegression__ を使用することができます。

## 22_ パーセプトロン

パーセプトロンは1950年代に表現された最初のモデルでした。

これは __二項分類__ 、つまり2つ以上のグループを分離することはできず、これらのグループは __線形分離可能__ でなければなりません。

パーセプトロンは __生物のニューロンのように機能__ します。活性化値を計算し、この値が正であれば1を、そうでなければ0を返します。

## 23_ 階層型クラスタリング(Hierarchical Clustering)

階層型アルゴリズムは、ツリー状の構造を作成してクラスタを作成することからそう呼ばれています。また、これらのアルゴリズムは、クラスター作成に距離ベースのアプローチを用いています。

最も一般的なアルゴリズムとして、下記のものが知られています。

__凝集型階層クラスタリング(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以下の場合、分割や分割を停止します。クラスタの数として残り、全てのデータ点ごとに分解されるわけではありません。

そのプロセスは下記のように表されます。

![HC](https://miro.medium.com/max/1000/1*4GRJvFaRdapnF3K4yH97DA.png)

距離を測り、カットオフを適用する方法としてデンドログラム法がよく使われます。

上記のクラスタリングのデンドグラムは以下のようになります。

![デンドログラム](https://miro.medium.com/max/700/1*3TV7NtpSSFoqeX-p9wr1xw.png)

[手引](https://towardsdatascience.com/understanding-the-concept-of-hierarchical-clustering-technique-c6e8243758ec)

## 24_ K-means clustering

このアルゴリズムは、最初にN個のデータポイントを使ってランダムにK個のクラスターを作成し、各クラスターについてクラスター内の全ポイントの平均値を求めます。つまり、各クラスターについて、クラスターの中心点(またはセントロイド)を見つけるのです。次に、各クラスタの二乗誤差の合計(Sum of Squared Error, SSE)を計算します。SSEはクラスターの品質を測定するために使用されます。クラスタの点と中心の間の距離が大きければ、SSEは高くなり、より近辺の点だけをクラスタ内の点として認識していることになります。

このアルゴリズムは、クラスターの中心に近い位置にある点は、そのクラスターに含まれるべきだという原則に基づいて動作します。つまり、ある点xがクラスタBよりもクラスタAの中心に近ければ、xはクラスタAに属することになります。このようにして、ある点がクラスタに入り、1つの点でもクラスタから別のクラスタに移動すると、セントロイドが変化し、SSEも変化します。SSEが減少し、セントロイドが変化しなくなるまでこの作業を続けます。ある程度の試行回数を重ねると、最適なクラスタが見つかり、セントロイドが変化しなくなるので試行を停止します。

初期のクラスター数'K'は、ユーザーからもらうパラメータです。

下記の画像はこのアルゴリズムの様子を示しています。

![Kmeans](https://miro.medium.com/max/1000/1*lZdpqQxhcGyqztp_mvXi4w.png)

この種のクラスタリング手法では、作成されるクラスタの数を定義する、ユーザー入力パラメータ「K」が必要です。これは非常に重要なパラメータです。
このパラメータを求めるために、いくつかの方法が用いられています。最も重要で最もよく使用される方法は、エルボー法です。小さいデータセットの場合、k=(N/2)^(1/2)、つまり分布のポイント数の半分の平方根を使用するというものです。

[手引](https://towardsdatascience.com/understanding-k-means-clustering-in-machine-learning-6a6e67336aa1)

## 25_ ニューラルネットワーク

ニューラルネットワークは、相互に接続された人工的なニューロン(ノード)の層の集合体で、人間の脳の構造と働きを念頭に置いてモデル化された概念です。ニューラルネットワークは、データセットを用いて学習させることができる予測のモデル作成の用途で作られています。自己学習アルゴリズムに基づいており、学習した情報セットから得られる結論や複雑な関係に基づいて予測を行います。

一般的なニューラルネットワークは、複数の層(レイヤー)から構成されています。最初の層は「入力層」、最後の層は「出力層」と呼ばれます。また、入力層と出力層の間にある層を「隠れ層」と呼びます。基本的には、予測と分類を行うためのブラックボックスな層として機能します。すべての層は相互に接続されており、ノードと呼ばれる多数の人工ニューロンで構成されています。

[ニューラルネットワークの手引](https://medium.com/ai-in-plain-english/neural-networks-overview-e6ea484a474e)

ニューラルネットワークはあまりに複雑で最急降下法では動作せず、誤差逆伝播法(Backproapagations)と最適化手法(オプティマイザー、Optimizer)という別の仕組みで動きます。

[誤差逆伝搬法の手引](https://towardsdatascience.com/an-introduction-to-gradient-descent-and-backpropagation-81648bdb19b2)

[最適化手法の手引](https://towardsdatascience.com/introduction-to-gradient-descent-weight-initiation-and-optimizers-ee9ae212723f)

## 26_ センチメント(感情)分析

テキストの分類とセンチメント(感情)分析は、非常に一般的な機械学習の問題であり、製品の予測や映画の推薦など、多くのアプリケーションに利用されています。

センチメント分析のようなテキスト分類問題は、アルゴリズムを用いて様々な方法で実現することができます。大きく分けて2つのカテゴリーがあります。

1つはbag of Word(単語の袋)モデル。データセット内のすべての文をトークン化して、語彙を示す単語の袋を形成します。データセットに含まれる個々の文やサンプルは、この単語の袋のベクトルで表されます。このベクトルを「特徴ベクトル」と呼びます。例えば、「It is a sunny day」(今日は晴れた日だ)と「The Sun rises in east」(太陽は東から昇る)という2つの文があるとします。単語の袋は、両方の文に含まれるすべての単語を表します。

2つ目の方法は、時系列な手法に基づいています。各単語を個別のベクトルで表します。つまり、一文はベクトル群のうちの1ベクトルとして表現されます。

[センチメンタル分析の手引き](https://towardsdatascience.com/a-guide-to-text-classification-and-sentiment-analysis-2ab021796317)

## 27_ 協調フィルタリング

NetflixやAmazon、Youtubeなどのサービスは誰もが利用したことがあるでしょう。これらのサービスでは、非常に高度なシステムを使って、ユーザーに最適なコンテンツを推薦し、ユーザー体験を素晴らしいものにしています。

推薦アルゴリズムには主に3つのコンポーネントがありますが、そのうちの1つが「候補者生成」(Candidate generation)です。この方法は、何千ものアイテムの巨大なプールが与えられたときに、ユーザーに推薦する候補の小さなサブセットを生成する役割を果たします。

候補者生成システムの種類には以下のようなものがあります。

__コンテンツベースのフィルタリングシステム__

__協調型フィルタリングシステム__

__コンテンツ・ベース・フィルタリング・システム__ : コンテンツの特徴を与えられたユーザーの特徴や行動を推測し、ユーザーが肯定的に反応するものを推薦しようとします。

__協調フィルタリング・システム__ : この手法では、コンテンツの特徴量が与えられる必要がありません。すべてのユーザーとコンテンツは、特徴ベクトル(または「埋め込み」)によって表現されます。

ユーザーとコンテンツの両方の「埋め込み」を自律的に作成し、ユーザーとコンテンツの両方を同じ空間に埋め込みます。

特定のユーザが好きなコンテンツや、自分と同じような行動や嗜好を持つユーザが好きなコンテンツを記録しておき、それを元にコンテンツを推薦するのです。

また、コンテンツに対するユーザーのフィードバックを収集し、それも推薦に利用します。

[協調フィルタリングの手引](https://towardsdatascience.com/introduction-to-recommender-systems-1-971bd274f421)

## 28_ タグ付け

## 29_ サポートベクタマシン(SVM)

サポートベクタマシン(SVM)は分類と回帰の両方で使われます。

分類器、もしくは回帰のためにSVMはマージン(距離)を用います。このマージンによって、モデルとその性能をより頑強かつ精確なものにしていきます。

![SVM](https://upload.wikimedia.org/wikipedia/commons/thumb/7/72/SVM_margin.png/300px-SVM_margin.png)

上のイメージはSVMは分類器を表現しています。赤線が実際の分類器で、点線が境界を表します。境界にいる点達が実際にマージン(距離)を決定することになります。
それらがその分類器のマージンを「サポート」するので、__サポートベクタ__と呼ばれています。

分類器と、最も近い点達の距離が__マージン距離__と呼ばれます。

ここでは複数の分類器を存在しうるのですが、マージン距離が最大となる分類器を選択します。
つまり、マージン距離とサポートベクターが最適な分類器を選ぶ手助けをしてくれるというわけです。

[Sklearnの公式ドキュメント](https://scikit-learn.org/stable/modules/svm.html)

[SVMの手引き](https://towardsdatascience.com/support-vector-machine-introduction-to-machine-learning-algorithms-934a444fca47)

## 30_強化学習(Reinforcement Learning)

強化学習(Reinforcement Learning, RL)は、「ソフトウェアエージェントが累積報酬(cumulative reward)を最大化する行動を取らなければならない状況を考慮する 機械学習の一分野」です。

ゲームをプレイするとき私達はクリアするために複数の選択や予測を行っていますが、これは多重決定プロセスと呼ぶことができます。こういったものが、強化学習アルゴリズムを必要とする種類の状況です。アルゴリズムの分類分けは、多重決定プロセスをサポートさせる決定のチェインに基づいています。

強化アルゴリズムは、決断を下していくことで開始状態からゴールに到達するために用いられます。

強化学習は自発的に学習を行うエージェントを含んでおり、ゴールに近づく正しい決断を下した場合はポジティブな報酬を与えられ、そうでない場合は報酬が与えられません。 そのようにして、エージェントは学習を行います。

![強化学習](https://miro.medium.com/max/539/0*4d9KHTzW6xrWTBld)

上記の画像は強化学習のセットアップの様子を表しています。

[WIKI](https://en.wikipedia.org/wiki/Reinforcement_learning#:~:text=Reinforcement%20learning%20(RL)%20is%20an,supervised%20learning%20and%20unsupervised%20learning.)

# 5_ テキストマイニング

## 1_ コーパス

## 2_ 名前のついた物体の認識

## 3_ テキスト解析

## 4_ UIMA

## 5_ 検索語・文書行列

## 6_ 単語の出現頻度と重み付け

## 7_ サポートベクタマシン(Support Vector Machines, SVM)

## 8_ アソシエーションルール分析

## 9_ マーケットバスケット解析

## 10_ 特徴量抽出

## 11_ Apache Mahoutの使用方法

## 12_ Wekaの使用方法

## 13_ NLTKの使用方法

## 14_ テキスト分類

## 15_ 語彙マッピング

# 6_ データの可視化

1行ずつ実行するために、`.R`のスクリプトファイルは R studioで開きましょう。

インストール方法についてはこちらを参照してください。 [10_ Toolbox/3_ R, Rstudio, Rattle](https://github.com/MrMimic/data-scientist-roadmap/tree/master/10_Toolbox#3_-r-rstudio-rattle)

## 1_ Rを用いたデータ抽出

数学において、関数fのグラフとは全ての整列された`(x, f(x))`の集合のことです。もし入力xがスカラー値なら、グラフは2次元になるでしょうし、それが連続関数なのであれば曲線になります。もし関数入力xが実数ペア`(x1,x2)`
であれば、グラフは`(x1, x2, f(x1, x2))`の3つ組の集合になり、連続関数なのであればグラフは面になるでしょう。

## 2_ 1変量, 2変量, 多変量の可視化

### 一変量(単変量)

「一変量」という用語は、統計学において、1つの変数の分布と、複数の変数の分布を区別するために使われますが、他の用途にも色々と使われます。
例えば、一変量データは単一のスカラー成分で構成されるデータを指し、そのスカラー成分が時系列のものであるとき、ある一つの量の時間的な値の集合を指すこともあります。

### 二変量

二変量解析は、最もシンプルな定量(統計)解析の1つです[1]。
2 つの変数 (X, Y と表記されることが多い) を分析して、それらの間の関係を明らかにすることを目的としています。

### 多変量解析

多変量解析(Multi-Variate Analysis, MVA)は、多変量の統計的原理に基づいており、一度に複数の統計的な結果変数を観察・分析するものです。デザインや分析の分野において、複数の次元からのトレーディングの研究を行う際に、対象となる結果に対して全ての変数の影響を考慮しながら行うための手法でもあります。

## 3_ ggplot2

### 概要

ggplot2は、Rのための作図機能で、graphicsの文法に基づいており、base graphicsとlattice graphicsの良い部分だけを抽出しようとしているものです。
作図を面倒にする多くの厄介な部分(凡例を描画するなど)を簡単にしてくれるだけでなく、強力なグラフィックスモデルを提供し、複雑で多層的なグラフィックスの作成を容易にします。

[http://ggplot2.org/](http://ggplot2.org/)

### ドキュメント

### 例

[http://r4stats.com/examples/graphics-ggplot2/](http://r4stats.com/examples/graphics-ggplot2/)

## 4_ ヒストグラム(度数分布) と パイチャート (Uni)

### 概要

頻度を可視化するための2種類のグラフとして、ヒストグラムとパイチャートが挙げられます。

ヒストグラムは、各分類クラスの頻度の分布を表し、これらの度数の分類間の分布を示し、パイは、100%を円形として、その中で各分類の相対的な割合を示すものです。

## 5_ ツリー と ツリーマップ

### 概要

[Treemaps](https://en.wikipedia.org/wiki/Treemapping) は、階層構造(木構造)のあるデータを、入れ子状の長方形のセットとして表示するものです。ツリー(木)の各枝には長方形が与えられ、その長方形は小枝を表す小さな長方形でタイル状になっています.先端(リーフ)ノードの長方形は,データの特定の次元に比例した面積を持ちます。多くの場合、リーフノードは、データの別の次元を示すために色付けされます。

### いつ使えばよいですか ?

- 枝の個数が10以下のとき
- 正の値を扱うとき
- 可視化に使える空間の広さが限られているとき

### 例

![ツリーマップの例](https://jingwen-z.github.io/images/20181030-treemap.png)

このツリーマップでは、各製品ごとの割合を体積で表現しています。液体製品は他の製品よりも多く販売されていることが分かります。もっと詳しく知りたい場合は、「液体」の製品を調べて、どの棚が顧客に好まれているかを調べて図を細分化していくことができるでしょう。

### 更に情報が必要な方は

[Matplotlibシリーズ5: Treemap](https://jingwen-z.github.io/data-viz-with-matplotlib-series5-treemap/)

## 6_ 散布図

### 概要

[散布図](https://en.wikipedia.org/wiki/Scatter_plot) (散布図、散布グラフ、scattergram、散布図とも呼ばれる) は、データセットの2つの変数の値を表示するための直交座標を使ったプロット方法の一つです。

### いつ使えばいいですか?

散布図は、2つの変数の関係を示したい場合に使用します 。そのため相関図と呼ばれることもあります。

### 例

![散布図の例](https://jingwen-z.github.io/images/20181025-pos-scatter-plot.png)

この散布図では、店舗の表面積と売上高(ユーロ)の間には正の相関があることを示しています。当前のことではありますが…。

### もっと�