#目次
##1章はじめに
機械学習、pythonについての説明。scikit-learnをなぜ使うかの説明。
開発環境、実行環境について説明。
自分は、Jupyter notebookを使うために、Anacondaをインストール。
spyderで趣味程度のプログラミングをしたが、今回の学習においては、テキストにのっとってJupyter notebookを使うことに。
- 以下が実行環境。
- matplotliv version:3.0.3
- Numpy version:1.16.2
- SciPy version;1.2.1
- IPython version7.4.0
- scikit-learn version:0.20.3
pythonについては、昔Javaをしたことがあるので、コーディングについては何とかわかる。
数学(行列、統計)についても、少し学生のときにかじったことがあるので、なんとかついていけそう。
#メモ
##p11 1.4.5 pandas In[6]:
display(data_pandas)
とコーディングしても、表が表示されない。
from IPython import display
display(data_pandas)
上記では、Ipython.display(data_pandas)として呼び出そうとしているが、これが間違っているみたい。正しくは、Ipython.display.display(data_pandas)なので、
import pandas as pd
from IPython.display import display
\# create a simple dataset of people
data = {'Name': ["John", "Anna", "Peter", "Linda"],
'Location' : ["New York", "Paris", "Berlin", "London"],
'Age' : [24, 13, 53, 33]
}
data_pandas = pd.DataFrame(data)
display(data_pandas)
これで表示できる。
##p17 1.7.2 成功度合いの測定:訓練データとテストデータ
・モデルを構築するのに使ったデータを、モデルの評価に使うことはできない。
モデルの性能を評価するには、ラベル(答え)を持つ新しいデータを使う必要がある。
モデルを構築するためのデータを訓練データ、評価するためのデータをテストデータという。
これらはデータセットから関数(train_test_split)から生成できる。
##p20 1.7.4 最初のモデル「k-最近傍法」
データの一番近くにある点を、正解とするモデル。
kは、固定されたk個の近傍点(複数可)を用いることができる。
モデルの評価には、テストデータによる正解率(テスト精度)とモデルを作ったデータによる正解率(訓練精度)があり、この二つの精度が適当となるモデルが最適と判断される。
##2.1 クラス分類と回帰
教師あり機械学習問題は以下の2つに分けられる。
クラス分類(2つないしはそれ以上のクラスに分離)
回帰(連続地の予測)
##p44 2.3.2.3 k-近傍回帰
Out[21]のコメントに「テストセットに対する精度」とあるが、正しくは「テストセットに対するターゲット」ではないか。
##p46 線形モデル
回帰モデルを「予測されるレスポンスは、入力特徴量の重み付き和とバイアスの和」とするもの。
(複数の特徴量にそれぞれ重みをかけてその和(+バイアス)が、レスポンスとなる)
##p50 2.3.3.3 リッジ回帰
線形モデルによる回帰の一つ。
係数(ω)の要素をなるべく小さくする。(特徴量が出力に与える影響をなるべく小さくしたい)boston_housingデータセットを用いる、とある。
X,y=mglearn.datasets.load_extended_boston()
Ridgeモデルのalphaパラメータで、特徴量の影響を調整できる。
alphaが大きいほど、制約が大きくなる(係数はゼロに近くなる)、
alphaが小さいほど、制約が小さくなる(係数への制約が小さくなり、係数は大きくなる)(alphaが0の時、線形モデルと同じ)
alphaの値と係数の大きさを比較すると、なるほどalphaが大きいほどそれぞれの要素に対する係数はゼロに近くなり、汎化が進む(可能性がある)。
alphaが小さいほど係数は大きくなる(ニアリー、線形モデル)⇒複雑なモデルに適合
今回のテストデータにおいては、(たまたま)alphaが小さいほうがモデルの精度は高い。
#モデルによって、適切なalphaを求める(モデルを決める)ことが重要
##p53. 2.3.3.4 Lasso
Ridgeに代わる線形回帰。リック回帰と似ているが、いくつか複数の係数が完全にゼロになる
⇒モデルのいくつかが完全に無視される⇒モデルが簡略化される。
##p56 2.3.3.5 クラス分類のための線形モデル
線形の2クラス分類器は、2つのクラスを直線や平面、超平面で分割する。
線形モデルは、以下の2つのアルゴリズムに区別される
-係数と切片の特定の組み合わせと訓練データの適合度を測る尺度
-正規化を行うか。行うならどの方法か。
一般的な線形クラス分類アルゴリズムは以下の2つ
-ロジスティック回帰
-線形サポートベクタマシン
上記の正規化の強度を決定するパラメータをCとすると、Cが大きくなると正規化が弱くなる(個々のデータに反応する)、Cが小さくなると正規化が強くなる(全体のデータを見る)
回帰の場合と同様に、線形モデルによるクラス分類は、低次元空間においては制約が強すぎるかもしれないが、高次元の場合には過剰適合を回避する方法が重要である。(Cをいい塩梅にする必要がある!?)
#取り組み
##6/10
Pythonをjupyter notebookで開始。1.4章まで写経完了。
##6/23
2.3.3.2 線形回帰まで完了
訓練データとテストデータとの違いや意味が分かってきた。モデル構築などをAPIに任せて、人間は最適な特徴や重みを見つけることが重要なのかな。
##6/30
p53. 2.3.3.4 Lasso
線形