データサイエンスとは、数学・統計学・計算機科学などの手法を組み合わせ、膨大なデータの中から科学的に有用な情報や知見を抽出し、意思決定や課題解決、将来予測に活用する学問・分野である。 と、生成AIが答えた通り、データサイエンスは非常に広範な分野を包含している総合的な学問である。 ここでは可能な限り体系的にデータサイエンスの基礎知識をまとめることを目指す。
データとは「観測や計測によって得られた数値の集まり」である。 また、集積したデータを特定の形式に整えたものをデータセットという。 データセットは一般に表形式で提供される。 たとえばAuto MPGデータセットでは、各行が自動車1台分の情報を表し、各列がその自動車の属性(燃費、シリンダー数、排気量など)を表す。
| 燃費 | シリンダー数 | 排気量 | 馬力 | 重量 | 加速 | モデル年 | 原産国 |
|---|---|---|---|---|---|---|---|
| 18.0 | 8 | 307.0 | 130.0 | 3504 | 12.0 | 70 | USA |
| 15.0 | 8 | 350.0 | 165.0 | 3693 | 11.5 | 70 | USA |
| ... | ... | ... | ... | ... | ... | ... | ... |
データはすべて数値化されている必要がある。 原産国のようなカテゴリデータは何らかの処理を適用し数値化する。
ここでは下記3つのデータセットを例に解説を進める。
説明変数を\( \mathbf X \)、目的変数を\( \mathbf y \)とする。 ここで、\( \mathbf X \)は\( N \)個のサンプルと\( n \)個の説明変数からなる行列、\( \mathbf y \)は\( N \)個のサンプルからなるベクトルである。
$$ \mathbf X = \begin{pmatrix} \mathbf x_1 \\ \mathbf x_2 \\ \vdots \\ \mathbf x_N \end{pmatrix} = \begin{pmatrix} x_{1,1} & x_{1,2} & \cdots & x_{1,n} \\ x_{2,1} & x_{2,2} & \cdots & x_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{N,1} & x_{N,2} & \cdots & x_{N,n} \end{pmatrix}, \quad \mathbf y = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_N \end{pmatrix} $$
| 用語 | 説明 |
|---|---|
| 機械学習 | 経験によってプログラムの性能を自動的に改善する技術の総称。 統計学+最適化理論+計算機科学の融合分野。 |
| 教師あり学習 | 説明変数と目的変数のセット(教師データ)を用いてモデルのパラメータを決定する手法。 |
| 教師なし学習 | 目的変数を設定せずにモデルのパラメータを決定する手法。 |
| 強化学習 | 報酬の最大化を目標としてモデルのパラメータを決定する手法。 |
| 回帰 | 目的変数が連続量の場合の予測問題。 |
| 分類 | 目的変数が離散量の場合の予測問題。 |
| 二値分類 | 2つのクラスに分類する問題。 |
| 多クラス分類 | 3つ以上のクラスに分類する問題。 |
| 過学習 | 学習データに対して過度に適合し、未知データに対する性能が低下する現象。 |
| 正則化 | モデルの複雑さを制御し、過学習を防ぐための手法。 |
| 誤差(損失) | モデルの予測値と実際の値との差を表す指標。 |
| 交差検証 | データセットを複数のグループに分割し、各部分を検証データとして使用してモデルを評価する手法。 |
3つ目のステップはいわゆる「最適化問題」を解くことであり、最適化理論の知識が必要となる。 ほとんどは制約付き最小化問題として定式化されるため、ラグランジュの未定乗数法やKKT条件などの手法がしばしば用いられる。
| 指標 | 説明 |
|---|---|
| 残差平方和 | 回帰問題における予測値と実際の値の二乗誤差の合計。 |
| 平均二乗誤差(MSE) | 回帰問題における予測値と実際の値の二乗誤差の平均。 |
| 平均絶対誤差(MAE) | 回帰問題における予測値と実際の値の絶対誤差の平均。 |
| 決定係数(R²) | 回帰問題におけるモデルの説明力を示す指標。1に近いほど良い。 |
| 尤度 | モデルが観測データを生成する確率。 |
| 対数尤度 | 尤度の対数を取ったもの。計算が容易になる。 |
| カルバック・ライブラー情報量(KL Divergence) | 2つの確率分布の差異を測る指標。 |
| AIC(赤池情報量基準) | モデルの良さと複雑さのバランスを評価する指標。値が小さいほど良い。 |
| 交差エントロピー | 分類問題における予測確率と実際のクラスの不一致を測る指標。 |
| 二値交差エントロピー | 二値分類問題における予測確率と実際のクラスの不一致を測る指標。 |
| 正解率(Accuracy) | 分類問題における正しく分類されたサンプルの割合。 |
| 適合率(Precision) | 陽性と予測されたサンプルのうち、実際に陽性である割合。 |
| 再現率(Recall) | 実際に陽性であるサンプルのうち、正しく陽性と予測された割合。 |
| F1スコア | 適合率と再現率の調和平均。 |
連続量 計算量 厳密解 解釈性 表現力
説明変数の線型結合によって目的変数を予測するモデル。 残差平方和の最小化(最小二乗法)を通じてパラメータ\(\mathbf w , b\)を決定する。
model = sklearn.linear_model.LinearRegression(
fit_intercept=True)
| 引数名 | 値 | 説明 |
|---|---|---|
| fit_intercept | True |
切片\(b\)を計算に含めるかどうか。
Falseにすると、切片を0として計算する。
普通はTrueで良い。
|
$$ f(\mathbf x) = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b $$
$$ {\rm minimize} \quad L(\mathbf w, b) = \sum_{i=1}^{N} (f(\mathbf x_i) - y_i)^2 $$
連続量 計算量 厳密解 解釈性 表現力
線型回帰にL2正則化を加えたモデル。 パラメータの二乗和をペナルティとして加えることで、過学習を防ぐ効果がある。
model = sklearn.linear_model.Ridge(
alpha=1.0)
| 引数名 | 値 | 説明 |
|---|---|---|
| alpha | 1.0 | 正則化の強さ\(\alpha\)。 大きいほど正則化が強くなる。 |
$$ f(\mathbf x) = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b $$
$$ {\rm minimize} \quad L(\mathbf w, b) = \sum_{i=1}^{N} (f(\mathbf x_i) - y_i)^2 + \alpha \sum_{j=1}^{n} w_j^2 $$
A. E. Hoerl and R. W. Kennard. (1970). Ridge Regression: Biased Estimation for Nonorthogonal Problems. Technometrics, 12(1), 55–67. https://doi.org/10.1080/00401706.1970.10488634
連続量 計算量 近似解 解釈性 表現力
線型回帰にL1正則化を加えたモデル。 パラメータの絶対値の和をペナルティとして加えることで、不要な説明変数の係数を0にする効果がある。
model = sklearn.linear_model.Lasso(
alpha=1.0)
| 引数名 | 値 | 説明 |
|---|---|---|
| alpha | 1.0 | 正則化の強さ\(\alpha\)。 大きいほど正則化が強くなる。 |
$$ f(\mathbf x) = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b $$
$$ {\rm minimize} \quad L(\mathbf w, b) = \frac{1}{2N} \sum_{i=1}^{N} (f(\mathbf x_i) - y_i)^2 + \alpha \sum_{j=1}^{n} |w_j| $$
R. Tibshirani. (1996). Regression Shrinkage and Selection Via the Lasso. Journal of the Royal Statistical Society: Series B (Methodological), 58(1), 267–288. https://doi.org/10.1111/j.2517-6161.1996.tb02080.x
連続量 計算量 近似解 解釈性 表現力
線型回帰にL1正則化とL2正則化の両方を加えたモデル。 Lasso回帰とRidge回帰の利点を組み合わせている。
model = sklearn.linear_model.ElasticNet(
alpha=1.0,
l1_ratio=0.5)
| 引数名 | 値 | 説明 |
|---|---|---|
| alpha | 1.0 | 正則化の強さ\(\alpha\)。 大きいほど正則化が強くなる。 |
| l1_ratio | 0.5 | L1正則化とL2正則化の比率。 0.0はRidge回帰、1.0はLasso回帰に対応する。 |
$$ f(\mathbf x) = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b $$
$$ {\rm minimize} \quad L(\mathbf w, b) = \frac{1}{2N} \sum_{i=1}^{N} (f(\mathbf x_i) - y_i)^2 + \alpha \left( l1\_ratio \sum_{j=1}^{n} |w_j| + \frac{1 - l1\_ratio}{2} \sum_{j=1}^{n} w_j^2 \right) $$
H. Zou and T. Hastie. (2005). Regularization and variable selection via the elastic net. Journal of the Royal Statistical Society: Series B (Statistical Methodology), 67(2), 301–320. https://doi.org/10.1111/j.1467-9868.2005.00503.x
離散量・確率 計算量 近似解 解釈性 表現力
説明変数の線型結合をシグモイド関数に通すことで、目的変数が特定のクラスに属する確率を予測するモデル。
model = sklearn.linear_model.LogisticRegression(
C=1.0,
l1_ratio=0.0)
| 引数名 | 値 | 説明 |
|---|---|---|
| C | 1.0 | 正則化の逆数。 小さいほど正則化が強くなる。 |
| l1_ratio | 0.0 | 正則化の種類を指定するパラメータ。 0.0はL2正則化、1.0はL1正則化を意味する。 |
$$ f(\mathbf x) = \frac{1}{1 + e^{-(w_1 x_1 + w_2 x_2 + ... + w_n x_n + b)}} $$
$$ {\rm minimize} \quad L(\mathbf w, b) = - \sum_{i=1}^{N} \left[ y_i \log f(\mathbf x_i) + (1 - y_i) \log (1 - f(\mathbf x_i)) \right] + \frac{1}{2C} \sum_{j=1}^{n} w_j^2 $$
多クラス分類の場合、ソフトマックス関数を用いる。
$$ f_k(\mathbf x) = \frac{e^{w_{1,k} x_1 + w_{2,k} x_2 + ... + w_{n,k} x_n + b_{k}}}{\sum_{k=1}^{K} e^{w_{0,k} + w_{1,k} x_1 + w_{2,k} x_2 + ... + w_{n,k} x_n}} $$
$$ {\rm minimize} \quad L(\mathbf w, b) = - \sum_{i=1}^{N} \sum_{k=1}^{K} y_{i,k} \log f_k(\mathbf x_i) + \frac{1}{2C} \sum_{k=1}^{K} \sum_{j=1}^{n} w_{j,k}^2 $$
D. W. Hosmer Jr, S. Lemeshow and R. X. Sturdivant. (2013). Applied logistic regression. John Wiley & Sons.
離散量・確率 計算量 近似解 解釈性 表現力
ロジスティック回帰にL1正則化を加えたモデル。 パラメータの絶対値の和をペナルティとして加えることで、不要な説明変数の係数を0にする効果がある。
model = sklearn.linear_model.LogisticRegression(
C=1.0,
l1_ratio=1.0,
solver='saga')
| 引数名 | 値 | 説明 |
|---|---|---|
| C | 1.0 | 正則化の逆数。 小さいほど正則化が強くなる。 |
| l1_ratio | 1.0 | 正則化の種類を指定するパラメータ。 0.0はL2正則化、1.0はL1正則化を意味する。 |
| solver | 'saga' | 最適化アルゴリズム。 'saga'はL1正則化に対応している。 |
$$ f(\mathbf x) = \frac{1}{1 + e^{-(w_1 x_1 + w_2 x_2 + ... + w_n x_n + b)}} $$
$$ {\rm minimize} \quad L(\mathbf w, b) = - \sum_{i=1}^{N} \left[ y_i \log f(\mathbf x_i) + (1 - y_i) \log (1 - f(\mathbf x_i)) \right] + \frac{1}{C} \sum_{j=1}^{n} |w_j| $$
多クラス分類の場合、ソフトマックス関数を用いる。
$$ f_k(\mathbf x) = \frac{e^{w_{1,k} x_1 + w_{2,k} x_2 + ... + w_{n,k} x_n + b_{k}}}{\sum_{k=1}^{K} e^{w_{0,k} + w_{1,k} x_1 + w_{2,k} x_2 + ... + w_{n,k} x_n}} $$
$$ {\rm minimize} \quad L(\mathbf w, b) = - \sum_{i=1}^{N} \sum_{k=1}^{K} y_{i,k} \log f_k(\mathbf x_i) + \frac{1}{C} \sum_{k=1}^{K} \sum_{j=1}^{n} |w_{j,k}| $$
D. W. Hosmer Jr, S. Lemeshow and R. X. Sturdivant. (2013). Applied logistic regression. John Wiley & Sons.
離散量・確率 計算量 近似解 解釈性 表現力
ロジスティック回帰にL1正則化とL2正則化の両方を加えたモデル。 Lasso回帰とRidge回帰の利点を組み合わせている。
model = sklearn.linear_model.LogisticRegression(
C=1.0,
l1_ratio=0.5,
solver='saga')
| 引数名 | 値 | 説明 |
|---|---|---|
| C | 1.0 | 正則化の逆数。 小さいほど正則化が強くなる。 |
| l1_ratio | 0.5 | L1正則化とL2正則化の比率。 |
| solver | 'saga' | 最適化アルゴリズム。 'saga'はElasticNet正則化に対応している。 |
$$ f(\mathbf x) = \frac{1}{1 + e^{-(w_1 x_1 + w_2 x_2 + ... + w_n x_n + b)}} $$
$$ {\rm minimize} \quad L(\mathbf w, b) = - \sum_{i=1}^{N} \left[ y_i \log f(\mathbf x_i) + (1 - y_i) \log (1 - f(\mathbf x_i)) \right] + \frac{1}{C} \left( l1\_ratio \sum_{j=1}^{n} |w_j| + \frac{1 - l1\_ratio}{2} \sum_{j=1}^{n} w_j^2 \right) $$
多クラス分類の場合、ソフトマックス関数を用いる。
$$ f_k(\mathbf x) = \frac{e^{w_{1,k} x_1 + w_{2,k} x_2 + ... + w_{n,k} x_n + b_{k}}}{\sum_{k=1}^{K} e^{w_{0,k} + w_{1,k} x_1 + w_{2,k} x_2 + ... + w_{n,k} x_n}} $$
$$ {\rm minimize} \quad L(\mathbf w, b) = - \sum_{i=1}^{N} \sum_{k=1}^{K} y_{i,k} \log f_k(\mathbf x_i) + \frac{1}{C} \left( l1\_ratio \sum_{k=1}^{K} \sum_{j=1}^{n} |w_{j,k}| + \frac{1 - l1\_ratio}{2} \sum_{k=1}^{K} \sum_{j=1}^{n} w_{j,k}^2 \right) $$
D. W. Hosmer Jr, S. Lemeshow and R. X. Sturdivant. (2013). Applied logistic regression. John Wiley & Sons.
連続量・離散量 計算量 厳密解 解釈性 表現力
説明変数に対する条件分岐によってデータを分割していくことで分類を行うモデル。 最終的に出来上がるものが木構造になることからこの名前がついている。
model = sklearn.tree.DecisionTreeClassifier(
max_depth=5,
min_samples_split=2)
| 引数名 | 値 | 説明 |
|---|---|---|
| max_depth | 5 | 木の最大深さ。 大きいほど複雑なモデルになるが、過学習のリスクも高まる。 |
| min_samples_split | 2 | 内部ノードを分割するために必要な最小サンプル数。 大きいほど過学習を防ぐ効果がある。 |
sklearn.tree.DecisionTreeClassifier
分類問題の場合、葉ノードの出力値\( c_m \)はその領域に属するデータの多数決によって決定される。
$$ f(\mathbf x) = \sum_{m=1}^{M} c_m \cdot I(\mathbf x \in R_m) $$
\( M \)は葉ノードの数、\( c_m \)は葉ノード\( m \)の出力値、\( R_m \)は葉ノード\( m \)に対応する領域、\( I(\cdot) \)は指示関数(条件が真なら1、偽なら0を返す関数)。\( p_k \)はクラス\( k \)の割合。
$$c_m = \textrm{argmax}_k \sum_{i: \mathbf x_i \in R_m} I(y_i = k)$$
目的関数はジニ不純度や交差エントロピーなどが用いられる。
$$Gini = 1 - \sum_{k=1}^{K} p_k^2$$
回帰問題の場合、葉ノードの出力値\( c_m \)はその領域に属するデータの目的変数の平均値である。
$$c_m = \frac{1}{N_m} \sum_{i: \mathbf x_i \in R_m} y_i$$
目的関数は平均二乗誤差が用いられる。
$$MSE = \frac{1}{N_m} \sum_{i: \mathbf x_i \in R_m} (y_i - c_m)^2$$
L. Breiman, J. Friedman, R. Olshen and C. Stone. (1984). Classification and Regression Trees. Chapman and Hall/CRC. https://doi.org/10.1201/9781315139470
超平面によってデータを分類するモデル。 カーネル関数を用いることで非線型の分類も可能。
$$f( \mathbf x) = \textrm{sgn} \left( \mathbf w \mathbf x + b \right) = \textrm{sgn} \left( \sum_{i=1}^{N} \alpha_i y_i K(\mathbf x_i, \mathbf x) + b \right)$$
sgn関数(符号関数)は、入力が正なら1、負なら-1を返す関数。\( \mathbf x_i \)は学習データ、\( y_i \)は学習データのラベル、\( \alpha_i \)はラグランジュ乗数、\( K(\mathbf x_i, \mathbf x) \)はカーネル関数。
回帰問題の場合は、以下の式で予測を行う。
$$f( \mathbf x) = \mathbf w \mathbf x + b = \sum_{i=1}^{N} (\alpha_i - \alpha_i^*) K(\mathbf x_i, \mathbf x) + b$$
目的関数:ヒンジ損失など。
$$L(\mathbf w, b) = \frac{1}{2} ||\mathbf w||^2 + C \sum_{i=1}^{N} \max(0, 1 - y_i (\mathbf w \mathbf x_i + b))$$
\( C \)は正則化パラメータ。
脳の神経回路網を模した機械学習モデル。
$$f(\mathbf x) = f^{(L)}(f^{(L-1)}(...f^{(2)}(f^{(1)}(\mathbf x))...))$$
\( L \)は層の数、\( f^{(l)} \)は\( l \)番目の層の関数。
AI(人工知能)という言葉は広義には「計算という概念に基づき、人の知能を何らかの手段を用いて模倣・再現したもの」である。 必ずしもAIをつくるための手段はコンピュータである必要はないが、現代においてはコンピュータ以外に存在しないため、事実上AIは「人の知能をコンピュータを用いて模倣・再現したもの」である。 ただし、どこまでいっても計算(数学)の域は出ないので、数値化できない(センシングできない)事象に対しては依然として無力であることに留意したい。 逆に言えば、物理世界のすべての情報を数値化できる世界になれば、AIは猛威をふるう技術となり得るかもしれない。
なお、そもそも「知能」という言葉の定義が曖昧であるがゆえに、どこからどこまでが人工知能であるかという線引きは非常に難しく、専門家の中でも度々議論されている。 人のような振る舞いをするAIがあったとして、その中身の仕組みを知っているか否かで人工知能と呼べるか否かも変わってくるのではないだろうか。 仮に人の知能を数式で完全に表現できたとすると、それはもはや知能と呼べるものなのか疑問が残るところである。
AIの分野では「学習」という言葉が飛び交うが、あくまで計算のことを表す言葉であり、人の知的活動としての「学習」とは別である。 (ただし、人の知的活動としての「学習」をヒントにしたであろう技術は多い。) あくまで計算の振る舞いが人の学習能力のように見えるだけであることに注意されたい。
ディープラーニング(深層学習)とは「さまざまな粒度の概念を階層構造に基づいて学習する手法」の総称である。 本来は「ディープラーニング=深層ニューラルネットワークの学習」ではないが、一般に普及したディープラーニングの手法が事実上ニューラルネットワークのみであるために、このような認識が浸透した。
機械学習と統計学は、やっていることだけを見ると非常に似ており、たとえば線形回帰モデルは機械学習にも統計学にも頻繁に登場する。 では機械学習と統計学の違いは何かというと、機械学習は数理モデルの出力(予測)を重視し、統計学は数理モデル自体の性質や計算過程を重視する。 数式で言えば、機械学習は\( \mathbf y \)、統計学は\( f \)に着目する。 端的な例でいえば、統計学でニューラルネットワークのような複雑怪奇な数理モデルはまず使われることはない。 なお、ニューラルネットワークをはじめとした機械学習技術には統計学の知識が多分に活用されているので、「機械学習は統計学の延長線上の技術」という解釈もできる。
量的変数の中でも、離散量は数えられる(とびとびの値を取る)量、連続量は無限に連続的に値を取れる量、と定義されている。 デジタル・アナログも同じ。 ただし、この分類は対立するものではない。 たとえば、お金は円という硬貨を単位にとびとびの値を取るものと見れば、お金は離散量と分類できる。 一方で、取り得る金額の桁が1兆、1京と増えていくと、それは連続量として扱うのが適切である。 つまり、データの粒度によって、離散量・連続量のどちらとでも見ることができる。
もう一つ別の例を挙げると、サイコロの目は一般的に1,2,3,4,5,6の6つなので、離散量として分類される。 しかし、仮に10,000面のサイコロ(もはや球)があったとすれば、それは連続量として扱うことが自然だと考えられる。 要するに、離散量・連続量の分類はデータの取り得る値の範囲に左右され、かつ主観によって決定されるということになる。 このあたりの話題は数学における微積分や強化学習における状態や環境の離散・連続とも関連しているように考えられる。
物理世界は原子という粒の集まりで成り立っているように、数の本質は「離散量」であり、「何を1とするか」でデータの見方が大きく変わる。