Ordinal Encorder苦戦と解決法
とあるコンペで↓のようなデータに取り組んでいました。
赤丸で囲った文字列情報をOrdinalEncodingして(1,2,3,4・・・)のように
転換しようと試みました。
OrdinalEncorderをImportしたのですが、下記のエラーが出て前に進みません。
Encoders require their input to be uniformly strings or numbers. Got ['int', 'str']
とありますが、info関数でみるとそもそもすべてObjectです。
全部Stringで統一されているのに、、と思っていました。
ObjectとStringは違うのかなと思ったので、ググってStringに変換する式を
みつけて試してみました。
うまくいきました!
Udemyコースで教えてもらったLinear Regressionの基本の流れ データクリーニング
基本の流れは大きく2つのパートに分かれていました。
前半 データクリーニング
後半 予測
です。
予測はCoursera Machine Learningの内容に入っていましたが、
データクリーニングは入っていなかったので面白かったです。
前半のデータクリーニングは大まかに6Stepとなっていました。
Step1 一点一様のような予測に影響を与えなさそうなデータを削除する
4000のSampleがあって、1行に3500種類があるようなデータ
Step2 5%未満なら欠損値を削除する
Step3 各要素ごとに正規分布がどうか確認する
Step4 1%の外れ値を削る
Step5 最小二乗法の確認
Step6 カテゴリー変数の設定
How編
Step1 一点一様のような予測に影響を与えなさそうなデータを削除する
describe関数(include='all')で記述統計量のfreqをみる。
freq/データ数が9割を超えているので一点一様とみなせる
data.drop(["列名”],axis=1)で削除したデータが作れる
Step2 5%未満なら欠損値を削除する
isnull().sum()関数で欠損値の数を見る。
5%以下なら削除して前に進む。
data.dropna(axis=0)で欠損値を削除したデータが作れる
Step3 各要素ごとに正規分布がどうか確認する
sns.displot(data["列名"])でみる
記述統計量と見比べて外れ値の考察をする
Step4 1%の外れ値を削る
q=data["列名”].quantile(0.99)で99%の区切りの値を設定する
data[data["列名"]<q)]でqより小さい値だけが残る
=上位1%が外れて99%が残ったことになる
グラフでみるとこうなる
取り除く前
取り除いた後
qの実験。99%と98.9%と99.1%の比較
(参考)
外れ値を削除したらIndexをリセットする
リセット前
3867行なのにインデックスは4344までやっている
リセット後
Step5 最小二乗法の確認
確認項目は全部で5つある
1/5 線形の確認 散布図で確認。線形性がなければ対数変換。
対数変換
基データに足す
2/5 内在性の確認
予測結果とSampleに比例のような相関があるかないかの確認なので
結果が出るまで分からない
3/5 正規性と同分散性の確認
①正規性②平均0の確認、Udemyに実践はなかった。。。
③同分散性 値が高いところと値低いところで平均からの
離れ具合が同じかどうか
対数変換することで担保されているというあっさりしたコメントだった。
4/5 自己相関性 時系列を扱うデータにあてはまりやすい。
Udemyの練習データは時系列でなかったのであっさりスルー
StatsModelのサマリー表に出てくる
タービンワトソンで確認する方法があるという説明あり
5/5 -多重共線性 StatsModelのVIFで確認する
VIFで多重共線性があると見えるものは削除
Step6 カテゴリー変数の設定
pd.get_dummies(data,drop_first = True)で作成する
drop_firstは重要。Nカテゴリーであれば、N-1のダミー変数の作成の必要がある。
そうしないと多重共線性になってしまう。
なのでN-1のダミー変数を作成した後にVIFを再度確認する
Step1-6で削除する行が出てきた場合は
data.drop(["列名”,axis=1])で削除していく。
全部終了したら、yを先頭にして並べ替える
以上がUdemyのコースで教えてもらったデータクリーニングの流れでした。
次回Courseraのデータ例に当てはめてみたいと思います!
Linear Regressionの精度をどうはかるか?
以前にLinear Regressionの精度はどう考えればいいのだろうか?
ということを日記に書きました。
Week5までのまとめとLinear Regressionの精度の考え方 - 暇人日記
悩みはJがいくらだったら精度が高いとか低いとかXX%と言えるんだろう、
ということでした、
Logistic RegressionでははっきりとXX%と出るのですが、
Linear RegressionではJが20億と言われてもピンとこないという悩みでした。
受講しているUdemyのコースの中に決定係数という考えが出てきましたので
これを使ってJが20億だったのはどういう値だったのかということを
見てみたいと思います。
決定係数は0から1の間をとり1に近ければ近いほど精度が高いという
指標です。
決定係数はPythonのStatsModelに含まれています。
早速実行してみました↓
決定係数はR-squaredで表記されているので0.733です。
やっぱり高くて良いとみていいか、低くて悪いとみていいかわかりませんorz
違うところで面白いものが見えました。
赤丸で囲ったroomのp値です。
この値は0.5以上だと予測に影響を与えていないという指標なのですが、
roomは5以上あります。
これは家の価格を面積と部屋数から分析する課題だったのですが、
部屋数は関係ないというように示されています。
Octaveで標準化して計算してパラメーターです。
部屋数に関するパラメーターは3つ目なので、これでみると
あってもなくても関係ないというようには見えないのですが。。。
不思議ですが、面白いです。
また時間あるときに考えてみます。
仮説検定 後半
今回は「薬は血中マグネシウム度を向上させる」という仮説検定に
取り組みたいと思います。
こうあってほしい仮説は「薬は血中マグネシウム度を向上させる」なので、
採用したくない、こうあってほしくない帰無仮説は
「薬は血中マグネシウム度を向上させない」になります。
「薬は血中マグネシウムを向上させない」を数式で表すと、
投薬後の血中マグネシウム度 < 投薬前の血中マグネシウム度
つまり
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0
となります。
データを見ると、
投薬後平均-投薬前平均は0以上です。
前回と同じくTスコアを算出します。
μ0は前回と同じく0なので計算結果も同じで2.29となります。
ここまでは同じなのですが検定の絵が変わります。
今回の
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0
と前回の
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度 = 0
では仮説の範囲が違います(うまく表現できませんが)
つまり
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0
では平均は左側の青のゾーンは棄却する必要がありません。
なぜなら平均が≦0の範囲にあるからです。
(これを片側検定というようです。)
なので、95%の確率(=有意水準)では↓の絵になります。
T値が1.83以上なら棄却、1.83以下なら棄却できません。
今回はT値が2.29のため棄却となります。
つまり
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0
ではない。
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度>0
となるため95%の有意水準で薬は効果があるとなります。
それでは99%の有意水準だとどうなるのかと思って考えてみました。
グラフの絵が↓になります。
Tスコアは2.29のため帰無仮説を棄却できなくなります。
つまり
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0
が正しいとなり、薬の効果がなくなるとなると思います。
前回の日記と同じ結論になりました。
95%なら効果があるといえるけど99%ならいえないということですね。
今回はここまでです。また次回頑張ります!
仮説検定 前半
仮説検定は今まで書いてきた『差がある』といえるかと信頼区間を足した内容
だと思いました。
投薬は血中マグネシウム度上昇に効果があったのか、というのは
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度がプラスだったら、
『効果がある』といえます。
ただ、投薬後の平均 - 投薬前の平均 だけで言い切ってはだめで、
↓のように95%の確率で平均値はプラスだから『効果がある』といえます。
基本的には差が信頼区間で95%だったり、99%だったりの部分に入るか入らないか
を基準としていると思います。
仮説検定の面白い点は帰無仮説と対立仮説という1セットの考え方だと思いました。
採用したくない、こうあってほしくない、という説を帰無仮説にして、
↑の図で信頼区間の外だと証明して、帰無仮説はあてはまってないから、
その反対の説=対立仮説が正しいというようにもっていくのが
仮説検定の考え方という説明でした。
血中マグネシウム度の問題で考えてみます。
帰無仮説は採用したくない、こうあってほしくないサイドの仮説なので、
「薬は血中マグネシウム度に関係ない」になります。
こうあってほしい仮説は「薬は血中マグネシウム度に関係ある」だからです。
(薬を開発した人からすると関係あっていてほしいはずです)
「薬は血中マグネシウムに関係ない」を数式で表すと、
投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度 = 0
となります。
ここで一度データを振り返ります。
とても差が0には見えませんが、統計学上はそれをどう説明するかに
興味がありました。
まず、Tスコアなるものがでてきます。
これはTの値が↓の図でどこに位置しているかを表しています。
95%の確率=有意水準である↑の場合であれば、Tが-2.262以下や2.262以上だったら、
信頼区間の外側にいるので、仮説が正しいといえないとなります。
考え方自体は『差がある』といえるかと信頼区間を足した内容だと思ったのは
この部分でした。
ではこのTスコアは何を意味しているかです。
は投薬前平均と投薬後平均の差なので0.33です。(↑のデータ参照)
は標本標準平均/サンプル数の平方根=標準誤差で0.14です。
は仮説の平均です。
ここでは投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度 = 0
となります。
計算するとTスコアは(0.33-0)/0.14=2.29となります。
t値はサンプル数によって値が変わります。
今回のサンプル数は10なので↓の図となります。
95%だと2.29は信頼区間外なので帰無仮説を棄却、つまり
「薬は血中マグネシウム度に関係ない」と95%の有意水準でいえない、となります。
なので「薬は血中マグネシウム度に関係ある」となります。
一方、99%の確率の場合は2.29は信頼区間内となります。
「薬は血中マグネシウム度に関係ない」と99%の有意水準でいえる、となります。
なので、帰無仮説を棄却するのは有意水準を恣意的にいじればできるので、
実務ではどのようにしているのだろうと思いました。
次回は「薬は血中マグネシウム度を向上させる」という仮説検定に
取り組みたいと思います。
今回はここまでです。また次回頑張ります!
信頼区間を図で考えてみる
『差がある』といえるか-統計学-前編で書いた
式の詳細はおいといて、<信頼区間>は上限と下限があり
この例では 95%の精度で信頼区間は0.01-0.65となります。
を図で考えてみたいと思います。
まず、信頼区間の意味です。
精度が95%とは95%の確率で平均値は信頼区間の間にあるということを
意味しています。
95%の信頼区間とは図にすると ↓で、平均値が95%の面積の中に
あることを意味しています。
これに
この例では 95%の精度で信頼区間は0.01-0.65となります。
の要素を加えます。
95%の精度で下限が0.01で、上限が0.65というのは↑のように
表現されると思います。
なので平均は0.01~0.65の間に95%の確率で存在することになります。
この0.01~0.65は投薬後-投薬前の差なので差がプラスのため、
効果があったと『差がある』ことになります。
99%の場合を考えてみます。
同じ課題を99%の信頼区間で考えた結果が↓でした。
精度が99%ではα=0.005になりt値は3.250となります。
この場合は信頼区間は-0.14~0.80となります。
図にすると↓になります。
99%の精度では下限が-0.14で、上限が0.80というのは↑のように
表現されると思います。
なので平均は-0.14~0.80の間に99%の確率で存在することになります。
投薬後-投薬前の差なので差がプラスだけではなくマイナスの可能性があるため、
効果があったとはいえない、『差がある』とはいえないということになります。
最後にz値とt値の95%の信頼区間を横並びにしてみてみたいと思います。
95%という同じ信頼区間ですが、図には違いがあります。
t値は標本数が少ないときに用いるものでしたので、
イレギュラー値の影響を色濃くうけて両端が上がるという話でした。
(図ではあんまりそう見えませんが。。。)
なので、両端が盛り上がっていて面積2.5%分を確保すると、
信頼区間の上限/下限の分岐点はz値より端によっていきます、と理解しています。
とりあえずこの理解で仮説検定に進んでいってつじつまがあわなくなったら
戻ってきたいと思います。
今回はここまでです。また次回頑張ります!
『差がある』といえるか-統計学‐後編
一番使いそうなパターンが前々回の日記と前回の日記のパターンでしたが、
Udemyの講義にはほかのパターンもあったので、表にまとめてみました。
全部で4つの信頼区間の式がありました。
各々の使う条件は表に書いたことが講義中に述べられていました。
母分散が既知-->z値
母分散が未知-->t値
であることが確認できました。
このサマリー表を頭に入れて、Udemyの次のパートの仮説検定に取り組みます!
母集団が2つのパターンが↑の表でしたが、
母集団が1つのパターンをフローチャートにしてz値やt値の考え方を
整理しました↓
今回はここまでです。また次回頑張ります!
『差がある』といえるか-統計学-中編
NYのリンゴの価格とLAのリンゴの価格ではどちらが高いか、ということを
NY10個のサンプル、LA8個のサンプルをもとに考えるという課題の要約に
取り組みます。
①2つの母集団が正規分布 <--前回の日記と同じ
かつ
②2つの母集団は独立 <--前回の日記と異なる
かつ
③2つの母集団の分散は不明 <--前回の日記と同じ
かつ
④標本数(=サンプル数)が異なる <--前回の日記と異なる
①③は前回と同じで、②④が異なります。
この差がどう影響を与えるかというと信頼区間の式が↓こうなります。
出典;Udemy
前回とかなり見た目が違います。
前回と並べてみます。
『差の平均』±『t値』X 『○○』という構図は同じで
『○○』の部分が違う感じに見えます。
なぜ違うかというのは講義でも触れられていませんでしたが、
『〇〇』の部分は差異の分散に関することなので、ここの求め方が異なる、
と理解しました。
なぜ『○○』の部分が違うのかは④標本数が異なるだからではないかと
実問題を解いていて思いました。
出典;Udemy
NYのリンゴの10個のサンプルの平均は$3.94で
LAの8個のサンプルの平均は$3.25で平均の差は$0.70です。
平均の差としてはこれが正解です。
ただ、差異の分散がどうなっているかと考えたときに
NYとLAでサンプル数が異なっているのはどう考えればいいのだろうと思いました。
というのはサンプル数=標本数が10と8のため、
差異が10にもならないし、8で考えるのも不自然になるからです。
これがサンプル数が同じ数の前回の日記のような場合だと
サンプル数10同士なので、差異のデータも10個になって、
ばらつき=分散がどうなってるといえますがサンプル数が異なっていると
差異の数が10とも8とも言い難くなると思いました。
試しに無理やり差異を10個にしてみました。
差異の平均がさっきは$0.70だったのに、今回は$1.345になり
明らかに間違いです。
なので無理やり差異を10個、もしくは8個作るのが無理だと思いました。
そうすると差異のデータがそもそもないのでばらつき=分散を考えれないので、
『プールした分散』が出てきたのだと思いました。
つまり<④標本数(=サンプル数)が異なる>だと↑の式になるのだと思います。
そして<②2つの母集団は独立>のときに<④標本数(=サンプル数)が異なる>が
起こる可能性が出てくるのだと思います。
前回の日記のように②2つの母集団(投薬前と投薬後)は従属のときは
<④標本数=サンプル数は同じ>になるのだと思いました。
今回の日記のパターン
①2つの母集団が正規分布②2つの母集団は独立③2つの母集団の分散は不明
④標本数が異なる
と
前回の日記のパターン
①母集団は正規分布②2つの母集団(投薬前と投薬後)は従属=標本数は同じ
③母集団の分散は不明
が実務上は一番多いのかと思って日記に書きました。
母集団の分散なんて不明なことが多いだろうと思ったのと、
今回の日記は日本とアメリカの○○動向の違いのような地域別分析のようなケースで
使うかなと思いました。
前回の日記はテストマーケティングの前後のようなケースで使うかなと思いました。
今回はここまでです。
また次回頑張ります!
『差がある』といえるか-統計学-前編
Deep Learning Specializationをうけるためには、
Pythonを理解したほうがいいと思い、このコースに取り組んでいます。
主目的はPythonに習熟したいだったんですが、コースの1/3を終えても
Pythonは出てこずひたすら確率/分布/統計の勉強となっています。
でも統計もやってみたいと思っていたので面白いです。
なぜ確率/分布/統計をやるかというとデータサイエンスには
土台として必要なようです。
肌感覚としては土台として必要というところがわからない点もあります。
ただ、Signateで取り組んだ課題のようにデータが5000のうち347が『1』で
他が『0』という圧倒的に『0』が大きいようなデータの分布が
NeuralNetworkの精度に影響したんではないかと思っていたので面白いです。
特に面白いと思っているのが『差がある』といえるか、
どうかの統計学的な裏付けです。
とある薬を飲むと血中マグネシウム度が上昇する、
ということを10人の被験者で効果があったかどうか『差がある』といえるかどうか
という問題がありました。
出典;Udemy
平均だけをみると投薬後が投薬前より増えているから
『効果があった!』と思うのですが、
平均はあくまで平均でデータのばらつきをみながら判断するべきというのが
統計学の考え方のようです。
統計学では
①母集団は正規分布
かつ
②2つの母集団(投薬前と投薬後)は従属=標本数は同じ
かつ
③母集団の分散は不明
のときは下記の式を用いて投薬後-投薬前の差についての
<信頼区間>なるものを計算します。
出典;Udemy
式の詳細はおいといて、<信頼区間>は上限と下限があり
この例では 95%の精度で信頼区間は0.01-0.65となります。
つまり投薬後-投薬前は95%の精度で0.01~0.65で+なので
効果がある『差がある』といえるという論理でした。
もしも信頼区間が-0.2~5.5であればプラスもマイナスもあるため、
効果があるとは言えない状態となります。
-0.2というのは投薬後が投薬前より血中マグネシウム度が下がっているので、
薬が効いていないということになるからです。
信頼区間の式を私なりに説明したものです。
理解に時間がかかったのが<t値>と<差異の標本標準偏差>です。
t値を理論も何もなく求める方法を先に書きます。
t値は↓の表で定められています。
縦軸が<n-1>です。今回の場合は標本数が10なので9になります。
横軸がα/2です。今回は95%精度なので1-0.95=αなのでα/2は0.025になります。
なので、今回のt値は2.262となります。
精度が95%ではα=0.025でしたが
精度が99%ではα=0.005になりt値は3.250となります。
この場合は信頼区間は-0.14~0.80となります。
信頼区間の幅は0.94です。
95%の信頼区間0.01~0.65だったので幅が0.64です。
精度が95%とは95%の確率で平均値は信頼区間の間にあるということを
意味しています。
95%の確率で差異の平均はプラスだから『差がある』といえたわけです。
精度99%にすると99%の確率で平均値が信頼区間の間にあるということなので、
確率をあげるために幅が大きくなっていきます。
なので95%の幅は0.64ですが、99%の幅は0.94と大きくなっています。
結果99%では差の平均がプラスにもマイナスにもなりえるので、
『差がある』とはいえなくなりました。
違う見方をすると90%の精度では『差がある』といえるけど、
95%の精度ではいえない、というように○○%の精度なら『差がある』といえる、
というように使えるのかなと思いました。
t値の理論的な話です(私の理解できる範囲ですが)
t値はスチューデントのt分布に基づいています。
絵は↓になります。
出典;Udemy
スチューデントのt分布は正規分布とよく似た形をしていますが、
両端が正規分布より大きくなっています。
これはスチューデントのt分布は標本数が少ないことを前提にしているため、
外れ値やイレギュラーな値の影響を正規分布より大きくうけることを表しています。
標本数が大きくなれば大きくなるほど外れ値やイレギュラーな値は
1/100000とかになって無視できるような割合になりますが、
標本数が少なく1/10や1/20になるとt分布になるということです。
t値は標本数が少ないときに使うものですが、
標本数が多いときはz値を使います。
おそらく標本数が少ない≒母集団の分散が不明となっていて
③母集団の分散は不明なとき
はt値を使うとレクチャーで言っているように思いました。
母集団の分散がわかっているときはz値を使うということだと思います。
次に<差異の標本標準偏差>です。
標準偏差というと↓の式と高校の時に習ったのですが
標本の標準偏差というと↓の式になるということです。
なぜ分母がn-1になるのかわからないのですが、
とにかく母集団全数でなく部分、つまり標本のときはこの式を用いるようです。
今回はここまでです。
次回は講座内にあった
NYのリンゴの価格とLAのリンゴの価格ではどちらが高いか、ということを
NY10個のサンプル、LA8個のサンプルをもとに考えるという課題の要約に
取り組みます。
①2つの母集団が正規分布
かつ
②2つの母集団は独立
かつ
③2つの母集団の分散は不明
かつ
④標本数が異なる
どいう条件になります。
また次回頑張ります。
いつかは取り組みたいCourseraのコース『Deep Learning Specialization』-後半-
Deep Learning Specializationで何を学べるか、ということを今回は見てみたいと思います。
前回の日記で書いていた各コースの所要時間とレベルとPyrhonと
Week毎の時間をまとめてみました。
どうやらTensorflowがWeek2とWeek4で必要なことが見えてきました。
コース前にはある程度勉強してから望みたいと思います。
大きく言うと
コース1つ目のNeural Network and Deep LearningはCoursera Machine Learningで
学んだ内容をPythonでやることになりそうだと思いました。
FeedForwardやBackpropagationなどの説明があるとコースのシラバスにあったので
そう判断しました。
コース2つ目のImproving Deep Neural Networks;: Hyperparameter tuning, Regularization and OptimizationはTensorflowを使うのが大きく違いそうです。
Week1はBias/Variance/RegularizationなどCourser MachineLearningで学んだ内容と
同じにみえます。Week2にはmini-batch gradientというCourser MachineLearningでは
Week10で概念を学んでプログラム実践はしていないものです。Large Scale Machine Learningという大項目の中にmini-batch gradientは入っていたのでDeep Learningぽくて
楽しみです。
コース3つ目のStructure Machine Learning Projectsは
どのアルゴリズムを用いたほうがいいかを学ぶと説明されています。
単語でいうとtest/trainなどありますが、説明文にはAndrew Ng先生の経験則から
伝授すると書かれていて魅かれるものがあります。
コース4つ目のConvolutional Neural NetworksはいわゆるCNNのようです。
あまり詳しくわかっていないのですが、このConvolutional Neural Networksは
よくみる単語でした。これをTensorflowで実践できるようです。
コース5つ目のSequence ModelはいわゆるRNNのようです。
これもわかってないのですがRecurrent Neural Networkもよく見る単語でした。
言語や音声を認識するのに効果的と紹介されており、Pythonで実践するようです。
Tensorflowなのかほかのライブラリなのかは明記されていないので、
事前学習をどうしようかはまた違う調査が必要だと思いました。
とりあえずここまでで概念でいえばCNNとRNNの事前学習と
プログラミングではTensorflowが必要ということがわかりました。
PythonにはNumpyやPandasやKarasがあるみたいで、
その相関なのか使いどころなのかがよくわかっていないので、
これも事前勉強すると学習期間の短縮=安く受講につながるかなと思いました。
事前学習どころがわかったので、どう学習するか次回考えてみます。
↓コースの説明の貼り付けです。
いつかは取り組みたいCourseraのコース『Deep Learning Specialization』-前半-
ここ1か月は『フリーソフトウェアで学ぶ機械学習入門』を読んで
書いてあるPythonのコードを写経のように書いていました。
なんでこういう本を読んでいるかというと、
いつかはこのコースをやりたいと思っているからです。
『Deep Learning Specialization』
この日記で書いていたCoursera Machine Learning と同じく
Andrew Ng先生の講座です。
Courser Machine LearningでAndrew Ng先生の説明
は文系アラフォーの私でもわかりやすかったので、受けてみたいと思っています。
ただ、中級レベルはPythonが必要で
Deep Learning Specializationは開始から修了するまでの期間にチャージされる
仕組みのようなので、あらかじめある程度勉強してから受講して
料金を安く受けたいと思っています。
なので『フリーソフトウェアで学ぶ機械学習入門』のように
色々本を読んでみています。
いつかは取り組みたい『Deep Learning Specialization』の所要時間を
見てみたいと思います。
『Deep Learning Specialization』は5つのコースから構成されています。
①Neural Network and Deep Learning 20時間
②Improving Deep Neural Networks; 18時間
Hyperparameter tuning ,Regularization and Optimaization
③Structure Machine Learning Projects 5時間
④Convolutional Neural Networks 20時間
⑤Sequence Models 16時間
合計すると79時間です。
Courser Machine Learningは何時間だったんでしょう?
60時間でした。私は7か月かかりましたが。。。
続いて難易度Checkです。
Courser Machine Learningは難易度が書いてありませんでしたが、
『Deep Learning Specialization』にはあります。
①Neural Network and Deep Learning Intermidiate
②Improving Deep Neural Networks; Beginner
Hyperparameter tuning ,Regularization and Optimaization
③Structure Machine Learning Projects Beginner
④Convolutional Neural Networks Intermidiate
⑤Sequence Models Intermidiate
BeginnerとIntermidiateが混ざっています。
やはりCourser Machine Learningより難しそうです。。。
しっかり勉強しないと、と思いました。
次回は何が学べるのかを読んでまとめてみたいと思います。
やり残したことまとめ
時間があったら取り組もうといったものを忘れないように
まとめサイトを作ることにしました。
①NN4階層でsigmoidの代わりにReLUを使う
関連日記↓
②Signate課題でPCAをしてみる
関連日記↓
Coursera Machine Learningで学んだことを「機械学習入門」の内容と対応させてみる - 暇人日記
③前処理でデータの乱雑さのエントロピーを対応方針に加えるための勉強をする
④Linear Regressionの精度をどう考えるか
Week5までのまとめとLinear Regressionの精度の考え方 - 暇人日記
日記振り返りながら足していこうと思います。
Coursera Machine Learningで学んだことを「機械学習入門」の内容と対応させてみる
「機械学習入門」を読んでみました。
正確には「フリーソフトウェアで学べる機械学習入門」という本です。
読んでいると、『おぉ、これCourseraでやったやつだ!』『Courseraをやったときはこういう位置づけだとは思わなかった』みたいなことがあったので書いてみたいと思います。
まず「機械学習入門」ですが構成が↓だと本に書いていました。
Coursera Machine Learningで何を学んだかについては、
こちらの方のブログを参考にさせて頂きます。
私よりよっぽど頭よくて理解されている方で、まとめがわかりやすくて
好きなブログです。
Week1-11で何をやっていたかを引用させて頂きます↓
Week1(まとめ:本記事)
- Introduction
- Linear Regression with One Variable
- Linear Algebra Review
Week2(まとめ記事)
- Linear Regression with Multiple Variables
- Octave/Matlab Tutorial
Week3
Week4(まとめ記事)
- Neural Networks: Representation
Week5(まとめ記事)
- Neural Networks: Learning
Week6
Week7(まとめ記事)
- Support Vector Machines
Week8
Week9
Week10(まとめ記事)
- Large Scale Machine Learning
Week11(まとめ記事)
- Application Example: Photo OCR
Week10とWeek11以外は対応箇所があると思ったので↓のようにまとめてみました。
これをみて思ったのはPCAは前処理パートに位置づけされていることに気づきました。
Signateの課題を行った時もPCAをやったほうがよかったのかなと思いました。
本の第2章に『機械学習の流れ』が図解されていてので、
Courseraと対応させてみました↓
私が黄金の流れと呼んでいた
①予測式-->②Cost Function-->③Gradient-->④最適Θ-->⑤予測
は『学習』の部分だったんだと思いました。
本とCourseraだと対応させてみて勉強になりました。
面白かったです。
本にPythonで解く例題があるのでしばらく取り組んでみます。
勾配消失化問題!?
前回の日記でNeural Networkを3階層から4階層にするのができず、
「フリーソフトではじめる機械学習入門」という本を読んでみました。
これを選んだ理由は図書館ですぐ借りれたからです。
(ダメたったら違うのを借りよう/買おうと思ってました。)
思えば今までCourseraのMachine Learningの講座とUdemyのPython講座の2つだけうけて、延々とこの講座の2つの中で学んだことで「これできるかな」「こうやったらできるかな」と猪突猛進でやってたので、機械学習を俯瞰的に見ることができました。
と、前置きはこの辺にして、本を読んでるとニューラルネットワークの章の中に
「勾配消失問題」という項目が出てきました。
ひらたくいうと、『1980年ごろに階層増やすとうまくいかないことが顕在化した。原因はBackpropagation=誤差逆伝播法がうまいいかない』と書いてありました。
ほぅほぅ、と思って読み進めると
「2006年ごろに考案された事前学習法をきっかけに階層の深いディープラーニングニューラルネットワークに関する研究が盛んになり、さまざまな成果を挙げた」とありました。
なるほど、ということは事前学習法なるものを調べればOctaveでもできるのではないかと思ってググってみたら、
勾配消失問題 | AI研究所 - 人工知能に脅かされないために、人工知能を作る側の人間になる
勾配消失問題の原因のひとつの例は活性化関数でした。シグモイド関数などの場合、勾配が0に近い領域が存在するため、勾配消失に陥ると重みがほぼ修正されなくなります。
多層ニューラルネットワークでは一カ所でも勾配が0に近い層が存在すると、それより下層の勾配も全て0に近くなります。このため、層数が増えるほど(特に四層以上において)学習が難しくなっていました。
どうもSigmoid関数だと4層はだめだと書いてあるように見えます。。。
よって、活性化関数の変更は勾配消失問題を改善しました。
シグモイド関数の代わりにランプ関数(ReLUなど)を用いると、勾配消失が起きにくくなったのです。
他には、重みや初期化、勾配降下法の選択などが勾配消失に関係しています
となるとSigmoid関数の代わりにReLU関数を使うという手段がありそうだと思いました。
手段と課題としては
①ReLU関数を使う、但しReLU関数のDerivaveが必要<--今、私は知らない。
②重みや初期化、勾配降下法の選択を考える <--事前学習法だとおもいます。
②よりは①のほうが具体的なんで取り組んでみたいです。
ますは図書館から借りてきた本に色々と練習問題がついていたので、
そちらを先にやってみます。
Neural Network4階層がうまくいかない
前回の日記でNeural Networkを3階層から4階層へ変更しました。
Signateの課題でこれで精度が上がることを期待します!
3階層での結果が↓でした。
4階層ではこれ以上になるはずです!
結果です↓
あれ!?全然だめですorz
1の数が0って。。。
MAXIterの問題かもしれませんので400まで上げてみます。
いや、これでもだめでした。
なぜだろう。。。
もう一度checkinggradinetを見てみます。
前回の日記ではオッケーだったのに誤差が出ています。
Week5の課題を4階層で取り組んでcheckinggradientが同じように
不正解かどうかみてみます。
①10-->7-->5-->3のパターン
不正解です。
②10-->7-->5-->2のパターン
不正解です。
③10-->8-->6-->4のパターン
不正解です。
このパターンで深堀して考えてみます。
数式自体はこうなっています。
という考えでやってみました。
数式だとこうですね↓
ダメでしたorz
やっぱり正解にはなりません。
これはここで一回やめて、色々本を読んでみたいと思います。
また参考になることがあったらトライしてみます!