【SIROK技術勉強会 #4】機械学習と線形代数の基礎
-
Upload
shuntaro-tamura -
Category
Technology
-
view
3.714 -
download
0
Transcript of 【SIROK技術勉強会 #4】機械学習と線形代数の基礎
(株)シロク エンジニア
田村俊太郎 (25) あだ名は「たむしゅん」
■学生時代1番頑張ったこと 全ての両立、全てに本気 (サークル7個、塾講師、大学の研究)
受験数学 テニス サッカー 合気道 等
線形代数
■経歴 2014年3月:東京大学大学院修了 2014年4月:(株)サイバーエージェント入社 2014年8月:(株)シロク出向
【Qiita】 h0p://qiita.com/shuntaro_tamura 【ブログ】 h0p://ameblo.jp/tamutamu1990/
大学教授 塾講師 就職
エンジニア
「機械」が「学習」すること コンピュータ
過去のデータの中から、問題を解くための規則性を見つけさせる
検索エンジン、天気予報、 スパムメール検出、 画像認識、医療診断、 顧客セグメンテーション など
▼応用例
半教師あり学習 正解ありデータ + 正解なしデータ 強化学習 試行錯誤から規則性を見つける 深層学習(Deep Learning) 特徴量(Feature)の自動抽出
高コスト
(例)Deep Q Network によるブロック崩し
(例)IBM Watson、Googleの猫
Python vs R ●Pythonのメリット(vs R) 数学、機械学習系のライブラリが豊富 言語として拡張性に富む 他言語との連携がしやすい 動作が速い ●Rのメリット(vs Python) 非エンジニアに取っ付きやすい
Python vs R ●Pythonのメリット(vs R) 数学、機械学習系のライブラリが豊富 言語として拡張性に富む 他言語との連携がしやすい 動作が速い ●Rのメリット(vs Python) 非エンジニアに取っ付きやすい
メリットが 大きい
①データの取得 API・Webから取得、CSV、SQLなど ②データの加工その1 numpy や pandas などを使った行列計算 ③機械学習、データ分析 scikit learn を使って分析 ④データの加工その2 numpy や pandas などを使って整形 ⑤可視化 matplotlib を使って表現
データ→行列の形で保持
150個の事前データ from sklearn import datasets iris = datasets.load_iris() X = iris.data ←入力データ Y = iris.target ←正解データ(教師あり学習)
5.1, 3.5, 1.4, 0.2, setosa4.9, 3.0, 1.4, 0.2, setosa (中略)7.0, 3.2, 4.7, 1.4, versicolor (中略)6.3, 3.3, 6.0, 2.5, virginica
左から順に、 ・がく片の長さ(cm) ・がく片の幅(cm) ・花びらの長さ(cm) ・花びらの幅(cm) ・正解の品種(3種類)
ロジスティック回帰 from sklearn.linear_model import LogisticRegression logit= LogisticRegression() logit.fit(X,Y) → 学習完了
ロジスティック回帰 from sklearn.linear_model import LogisticRegression logit= LogisticRegression() logit.fit(X,Y) → 学習完了 → 入力データ(4値)を突っ込んでみると、 正解を予測してくれる! print(logit.predict_proba([5.1, 3.5, 1.4, 0.2])) → setosa:88% versicolor:12% virginica:0%
k-近傍法 from sklearn.neighbors import KNeighborsClassifier k = 5 knn = KNeighborsClassifier(k) knn.fit(X,Y) → 学習完了
k-近傍法 from sklearn.neighbors import KNeighborsClassifier k = 5 knn = KNeighborsClassifier(k) knn.fit(X,Y) → 学習完了 → 入力データ(4値)を突っ込んでみると、 正解を予測してくれる! print(logit.predict_proba([5.1, 3.5, 1.4, 0.2])) → setosa:100% versicolor:0% virginica:0%
ロジスティック回帰の性能評価 from sklearn.linear_model import LogisticRegression from sklearn import cross_validation cv = 10 logit= LogisticRegression() scores = cross_validation.cross_val_score(logit,X,Y,cv=cv) print(sum(scores)/cv) → 正解率:95%
データセットを10等分し、9割のデータを用いて学習。 → 残り1割の正解率で評価。 → 10回繰り返し、平均をとる。
k-近傍法の性能評価 from sklearn.linear_model import LogisticRegression from sklearn.neighbors import KNeighborsClassifier k = 1 knn = KNeighborsClassifier(k) cv=10 scores = cross_validation.cross_val_score(knn,X,Y,cv=cv) print(sum(scores)/cv) → 正解率:96%
万能なアルゴリズムは存在しない。 問題に応じて適切なものを選択し、使う。
いずれもk-近傍法を可視化。(コード30行弱) 左図:がく片を特徴量(Feature)にした → 73% 右図:花びらを特徴量(Feature)にした → 97% Featureが大事。アルゴリズムの精度に大きく影響。
まとめ ・教師あり学習と教師なし学習の違い:正解の有無 ・強化学習:試行錯誤から規則性を見つける ・Deep Learning:Feature(特徴量)の自動抽出 ・Pythonで実装:Anaconda入れておけばOK ・CrossValidationで性能評価 ・万能なアルゴリズムは存在しない ・Featureが大事
「線形」な「代数」学のこと
一次式で表せるような関係
「集合」(元の集まり) と「演算」により定義 された構造の学問
直線 画像処理、座標変換、 検索エンジン、量子力学、 連立方程式の解法、統計学、 回路学、制御論、機械学習 など
▼応用例
半群・群・環・体・束など。
長方形状に数字を並べたもの。
2 22 6
!
"#
$
%&
3 2 5 1 10 5 2 2 60 0 8 1 3
!
"
###
$
%
&&&
1 0 00 1 00 0 1
!
"
###
$
%
&&&
行ベクトル:成分を横に並べて書いたベクトル 列ベクトル:成分を縦に並べて書いたベクトル 成分:ベクトルに含まれる各々の数 次元:ベクトルの成分の個数 行列:数(=成分)を長方形状に並べたもの
2 5( )324
!
"
###
$
%
&&&
行ベクトル。2次元。
列ベクトル。3次元。
行ベクトル:成分を横に並べて書いたベクトル 列ベクトル:成分を縦に並べて書いたベクトル 成分:ベクトルに含まれる各々の数 次元:ベクトルの成分の個数 行列:数(=成分)を長方形状に並べたもの
2 5( )324
!
"
###
$
%
&&&
行ベクトル。2次元。
列ベクトル。3次元。
成分
行ベクトル:成分を横に並べて書いたベクトル 列ベクトル:成分を縦に並べて書いたベクトル 成分:ベクトルに含まれる各々の数 次元:ベクトルの成分の個数 行列:数(=成分)を長方形状に並べたもの
2 5( )324
!
"
###
$
%
&&&
行ベクトル。2次元。
列ベクトル。3次元。
成分
1 2 34 5 6
!
"#
$
%& 2行3列の行列(2 x 3 行列)
行ベクトル:成分を横に並べて書いたベクトル 列ベクトル:成分を縦に並べて書いたベクトル 成分:ベクトルに含まれる各々の数 次元:ベクトルの成分の個数 行列:数(=成分)を長方形状に並べたもの
2 5( )324
!
"
###
$
%
&&&
行ベクトル。2次元。
列ベクトル。3次元。
成分
1 2 34 5 6
!
"#
$
%&
行列の「型」
2行3列の行列(2 x 3 行列)
行 列
… 横の並び
… 縦の並び
1 2 34 5 6
!
"#
$
%&
第1行
第2行
第 1 列
第 2 列
第 3 列
2行3列の行列(2 x 3 行列)
(1, 1)成分 → 1 (1, 2)成分 → 2 (1, 3)成分 → 3 (2, 1)成分 → 4 (2, 2)成分 → 5 (2, 3)成分 → 6
a bc d
!
"#
$
%&+
x yz w
!
"##
$
%&&=
a+ x b+ yc+ z d +w
!
"##
$
%&&
a bc d
!
"#
$
%&−
x yz w
!
"##
$
%&&=
a− x b− yc− z d −w
!
"##
$
%&&
k a bc d
!
"#
$
%&= ka kb
kc kd
!
"#
$
%&
和・差・スカラー倍の次のように定義される
a bc d
!
"#
$
%&+
x yz w
!
"##
$
%&&=
a+ x b+ yc+ z d +w
!
"##
$
%&&
a bc d
!
"#
$
%&−
x yz w
!
"##
$
%&&=
a− x b− yc− z d −w
!
"##
$
%&&
k a bc d
!
"#
$
%&= ka kb
kc kd
!
"#
$
%&
a b cd e f
!
"##
$
%&&+
x yz w
!
"##
$
%&& →定義されない
和・差・スカラー倍の次のように定義される 和・差は「型」が同じ時のみ定義される
積 AB は次のように定義される ①Aの列数とBの行数が等しい時のみ定義される。 ②C=ABの時、Cの(i, j)成分は Aの第 i 行ベクトルとBの第 j 列ベクトルの積 とする。 ベクトルの内積!!!
A B 第i行
第j列
Cij = の内積
Cの(i, j)成分
積 AB は次のように定義される ①Aの列数とBの行数が等しい時のみ定義される。 ②C=ABの時、Cの(i, j)成分は Aの第 i 行ベクトルとBの第 j 列ベクトルの積 とする。 ③Aが l x m 行列 Bが m x n 行列の時、 C=ABは l x n 行列。
ベクトルの内積!!! ①より、等しい
a bc de f
!
"
###
$
%
&&&
xy
!
"##
$
%&&=
ax + bycx + dyex + fy
!
"
####
$
%
&&&&
3x2 2x1 3x1
行ベクトルと列ベクトルの積 行列の積
a b( ) xy
!
"##
$
%&&= ax + by
a bc d
!
"#
$
%&
x yz w
!
"##
$
%&&=
a b( ) xz
!
"##
$
%&& a b( ) y
w
!
"##
$
%&&
c d( ) xz
!
"##
$
%&& c d( ) y
w
!
"##
$
%&&
!
"
######
$
%
&&&&&&
=ax + bz ay+ bwcx + dz cy+ dw
!
"##
$
%&&
内積
行列の積の性質 ①交換法則は一般には成り立たない AB≠BA ②零因子の存在 A≠OかつB≠Oでも、AB=Oとなりうる
a b( ) xy
!
"##
$
%&&= ax + by
xy
!
"##
$
%&& a b( ) = xa xb
ya yb
!
"##
$
%&&
1 2( ) −21
"
#$
%
&'=1*(−2)+ 2*1= 0
①行列に割り算は存在しない ②単位行列 ③零行列 ④逆行列 ⑤転置行列
I2 =1 00 1
!
"#
$
%&, I3 =
1 0 00 1 00 0 1
!
"
###
$
%
&&&
IAI = IA = A
OAO =OA =O
O2,2 =0 00 0
!
"#
$
%&,O3,3 =
0 0 00 0 00 0 0
!
"
###
$
%
&&&
AA−1 = A−1A = IA−1
AT
Aij = AjiT
A = 1 00 2
!
"#
$
%&,B =
1 00 1
2
!
"##
$
%&&
⇒ AB = BA = I
A = 1 2 34 5 6
!
"#
$
%&⇔ AT =
1 42 53 6
!
"
###
$
%
&&&
⑥トレース(trace)、行列式(determinant) ⑦固有値 ・固有ベクトル
Ax = λx(x ≠ 0)λ x
A = a bc d
!
"#
$
%&
Tr(A) = a+ d, det(A) = ad − bc
⑥トレース(trace)、行列式(determinant) ⑦固有値 ・固有ベクトル
Ax = λx(x ≠ 0)λ x
A = a bc d
!
"#
$
%&
Tr(A) = a+ d, det(A) = ad − bc ac
!
"#
$
%&
bd
!
"#
$
%&
対角成分の和
平行四辺形の面積
⑥トレース(trace)、行列式(determinant) ⑦固有値 ・固有ベクトル
Ax = λx(x ≠ 0)λ x
A = a bc d
!
"#
$
%&
Tr(A) = a+ d, det(A) = ad − bc ac
!
"#
$
%&
bd
!
"#
$
%&
対角成分の和
平行四辺形の面積
座標変換
x
y
O
行列Aを左から掛ける
⑥トレース(trace)、行列式(determinant) ⑦固有値 ・固有ベクトル
Ax = λx(x ≠ 0)λ x
A = a bc d
!
"#
$
%&
Tr(A) = a+ d, det(A) = ad − bc ac
!
"#
$
%&
bd
!
"#
$
%&
対角成分の和
平行四辺形の面積
座標変換
x
y
O
行列Aを左から掛ける
定数倍変換 A x = xλ
機械学習 ・教師あり学習と教師なし学習の違い:正解の有無 ・強化学習:試行錯誤から規則性を見つける ・Deep Learning:Feature(特徴量)の自動抽出 ・Pythonで実装:Anaconda入れておけばOK ・CrossValidationで性能評価 ・万能なアルゴリズムは存在しない ・Featureが大事 線形代数 ・行列の積、交換可能性、零因子 ・単位行列、零行列、逆行列、転置行列 ・トレース、行列式、固有値、固有ベクトル