暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

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%が残ったことになる

 

グラフでみるとこうなる

 

取り除く前

f:id:omoshiroamericanews:20210607223026p:plain

取り除いた後

f:id:omoshiroamericanews:20210607222954p:plain

 qの実験。99%と98.9%と99.1%の比較

f:id:omoshiroamericanews:20210607223148p:plain

 

(参考)

 外れ値を削除したらIndexをリセットする

f:id:omoshiroamericanews:20210609231011p:plain

 

リセット前 

3867行なのにインデックスは4344までやっている

 

f:id:omoshiroamericanews:20210609231105p:plain

 

リセット後

f:id:omoshiroamericanews:20210612221656p:plain



 

Step5 最小二乗法の確認

確認項目は全部で5つある

 

1/5  線形の確認 散布図で確認。線形性がなければ対数変換。

 

f:id:omoshiroamericanews:20210612221755p:plain

対数変換

f:id:omoshiroamericanews:20210612221931p:plain

 

基データに足す

f:id:omoshiroamericanews:20210612222048p:plain

 

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に含まれています。

早速実行してみました↓

 

f:id:omoshiroamericanews:20210515225221p:plain

 

決定係数はR-squaredで表記されているので0.733です。

やっぱり高くて良いとみていいか、低くて悪いとみていいかわかりませんorz

 

違うところで面白いものが見えました。

赤丸で囲ったroomのp値です。

この値は0.5以上だと予測に影響を与えていないという指標なのですが、

roomは5以上あります。

これは家の価格を面積と部屋数から分析する課題だったのですが、

部屋数は関係ないというように示されています。

 

Octaveで標準化して計算してパラメーターです。

f:id:omoshiroamericanews:20210515231139p:plain

部屋数に関するパラメーターは3つ目なので、これでみると

あってもなくても関係ないというようには見えないのですが。。。

 

不思議ですが、面白いです。

 

また時間あるときに考えてみます。

 

 

 

 

仮説検定 後半

今回は「薬は血中マグネシウム度を向上させる」という仮説検定に

取り組みたいと思います。

 

こうあってほしい仮説は「薬は血中マグネシウム度を向上させる」なので、

採用したくない、こうあってほしくない帰無仮説は

「薬は血中マグネシウム度を向上させない」になります。

 

「薬は血中マグネシウムを向上させない」を数式で表すと、

投薬後の血中マグネシウム度 < 投薬前の血中マグネシウム度

つまり

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0

となります。

 

データを見ると、

f:id:omoshiroamericanews:20210127213508p:plain

 

投薬後平均-投薬前平均は0以上です。

 

前回と同じくTスコアを算出します。

f:id:omoshiroamericanews:20210208211840p:plain

μ0は前回と同じく0なので計算結果も同じで2.29となります。

 

ここまでは同じなのですが検定の絵が変わります。

 

今回の

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0

と前回の

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度 = 0

では仮説の範囲が違います(うまく表現できませんが)

 

つまり

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0

では平均は左側の青のゾーンは棄却する必要がありません。

なぜなら平均が≦0の範囲にあるからです。

(これを片側検定というようです。)

f:id:omoshiroamericanews:20210208214953p:plain

 

なので、95%の確率(=有意水準)では↓の絵になります。

f:id:omoshiroamericanews:20210214211605p:plain

T値が1.83以上なら棄却、1.83以下なら棄却できません。

今回はT値が2.29のため棄却となります。

つまり

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0

ではない。

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度>0

となるため95%の有意水準で薬は効果があるとなります。

 

それでは99%の有意水準だとどうなるのかと思って考えてみました。

 グラフの絵が↓になります。

f:id:omoshiroamericanews:20210214212734p:plain

Tスコアは2.29のため帰無仮説を棄却できなくなります。

つまり

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度≦0

が正しいとなり、薬の効果がなくなるとなると思います。

 

前回の日記と同じ結論になりました。

95%なら効果があるといえるけど99%ならいえないということですね。

 

 

 

今回はここまでです。また次回頑張ります!

仮説検定 前半

仮説検定は今まで書いてきた『差がある』といえるかと信頼区間を足した内容

だと思いました。

 

投薬は血中マグネシウム度上昇に効果があったのか、というのは

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度がプラスだったら、

『効果がある』といえます。

 

ただ、投薬後の平均 - 投薬前の平均 だけで言い切ってはだめで、

↓のように95%の確率で平均値はプラスだから『効果がある』といえます。

 

f:id:omoshiroamericanews:20210204230341p:plain

基本的には差が信頼区間で95%だったり、99%だったりの部分に入るか入らないか

を基準としていると思います。

 

仮説検定の面白い点は帰無仮説と対立仮説という1セットの考え方だと思いました。

 

採用したくない、こうあってほしくない、という説を帰無仮説にして、

↑の図で信頼区間の外だと証明して、帰無仮説はあてはまってないから、

その反対の説=対立仮説が正しいというようにもっていくのが

仮説検定の考え方という説明でした。

 

血中マグネシウム度の問題で考えてみます。

 

帰無仮説は採用したくない、こうあってほしくないサイドの仮説なので、

「薬は血中マグネシウム度に関係ない」になります。

こうあってほしい仮説は「薬は血中マグネシウム度に関係ある」だからです。

(薬を開発した人からすると関係あっていてほしいはずです)

 

「薬は血中マグネシウムに関係ない」を数式で表すと、

投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度 = 0

となります。

 

ここで一度データを振り返ります。

f:id:omoshiroamericanews:20210127213508p:plain

 

とても差が0には見えませんが、統計学上はそれをどう説明するかに

興味がありました。

 

まず、Tスコアなるものがでてきます。

 

f:id:omoshiroamericanews:20210208211840p:plain

 

これはTの値が↓の図でどこに位置しているかを表しています。

f:id:omoshiroamericanews:20210208212017p:plain

95%の確率=有意水準である↑の場合であれば、Tが-2.262以下や2.262以上だったら、

信頼区間の外側にいるので、仮説が正しいといえないとなります。

 

考え方自体は『差がある』といえるかと信頼区間を足した内容だと思ったのは

この部分でした。

 

ではこのTスコアは何を意味しているかです。

 

f:id:omoshiroamericanews:20210208211840p:plain

 

f:id:omoshiroamericanews:20210208212524p:plainは投薬前平均と投薬後平均の差なので0.33です。(↑のデータ参照)

f:id:omoshiroamericanews:20210208212658p:plainは標本標準平均/サンプル数の平方根=標準誤差で0.14です。

f:id:omoshiroamericanews:20210208212911p:plainは仮説の平均です。

  ここでは投薬後の血中マグネシウム度 - 投薬前の血中マグネシウム度 = 0

  となります。

 

計算するとTスコアは(0.33-0)/0.14=2.29となります。

 

t値はサンプル数によって値が変わります。

今回のサンプル数は10なので↓の図となります。

 

95%だと2.29は信頼区間外なので帰無仮説を棄却、つまり

「薬は血中マグネシウム度に関係ない」と95%の有意水準でいえない、となります。

なので「薬は血中マグネシウム度に関係ある」となります。

f:id:omoshiroamericanews:20210208214953p:plain

 

一方、99%の確率の場合は2.29は信頼区間内となります。

「薬は血中マグネシウム度に関係ない」と99%の有意水準でいえる、となります。

f:id:omoshiroamericanews:20210208215037p:plain

なので、帰無仮説を棄却するのは有意水準を恣意的にいじればできるので、

実務ではどのようにしているのだろうと思いました。

 

次回は「薬は血中マグネシウム度を向上させる」という仮説検定に

取り組みたいと思います。

 

今回はここまでです。また次回頑張ります!

信頼区間を図で考えてみる

『差がある』といえるか-統計学-前編で書いた

式の詳細はおいといて、<信頼区間>は上限と下限があり

この例では 95%の精度で信頼区間は0.01-0.65となります。

 を図で考えてみたいと思います。

 

まず、信頼区間の意味です。

 

精度が95%とは95%の確率で平均値は信頼区間の間にあるということを

意味しています。

 

95%の信頼区間とは図にすると ↓で、平均値が95%の面積の中に

あることを意味しています。

 

f:id:omoshiroamericanews:20210204225717p:plain


これに

この例では 95%の精度で信頼区間は0.01-0.65となります。

の要素を加えます。

 

f:id:omoshiroamericanews:20210204230341p:plain

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となります。

 

図にすると↓になります。

f:id:omoshiroamericanews:20210204232436p:plain

99%の精度では下限が-0.14で、上限が0.80というのは↑のように

表現されると思います。

 

なので平均は-0.14~0.80の間に99%の確率で存在することになります。

投薬後-投薬前の差なので差がプラスだけではなくマイナスの可能性があるため、

効果があったとはいえない、『差がある』とはいえないということになります。

 

 

最後にz値とt値の95%の信頼区間を横並びにしてみてみたいと思います。

 

f:id:omoshiroamericanews:20210204232753p:plain

95%という同じ信頼区間ですが、図には違いがあります。

t値は標本数が少ないときに用いるものでしたので、

イレギュラー値の影響を色濃くうけて両端が上がるという話でした。

(図ではあんまりそう見えませんが。。。)

なので、両端が盛り上がっていて面積2.5%分を確保すると、

信頼区間の上限/下限の分岐点はz値より端によっていきます、と理解しています。

 

とりあえずこの理解で仮説検定に進んでいってつじつまがあわなくなったら

戻ってきたいと思います。

 

今回はここまでです。また次回頑張ります!

 

『差がある』といえるか-統計学‐後編

一番使いそうなパターンが前々回の日記と前回の日記のパターンでしたが、

Udemyの講義にはほかのパターンもあったので、表にまとめてみました。

 

f:id:omoshiroamericanews:20210201211559p:plain


全部で4つの信頼区間の式がありました。

各々の使う条件は表に書いたことが講義中に述べられていました。

母分散が既知-->z値

母分散が未知-->t値

であることが確認できました。

 

このサマリー表を頭に入れて、Udemyの次のパートの仮説検定に取り組みます!

 

母集団が2つのパターンが↑の表でしたが、

母集団が1つのパターンをフローチャートにしてz値やt値の考え方を

整理しました↓

 

f:id:omoshiroamericanews:20210201213833p:plain

 

今回はここまでです。また次回頑張ります!

『差がある』といえるか-統計学-中編

NYのリンゴの価格とLAのリンゴの価格ではどちらが高いか、ということを

NY10個のサンプル、LA8個のサンプルをもとに考えるという課題の要約に

取り組みます。

 

①2つの母集団が正規分布 <--前回の日記と同じ

かつ

②2つの母集団は独立 <--前回の日記と異なる

かつ

③2つの母集団の分散は不明 <--前回の日記と同じ

かつ 

④標本数(=サンプル数)が異なる <--前回の日記と異なる

 

①③は前回と同じで、②④が異なります。

 

 

この差がどう影響を与えるかというと信頼区間の式が↓こうなります。

f:id:omoshiroamericanews:20210131210842p:plain

出典;Udemy
 

前回とかなり見た目が違います。

 

前回と並べてみます。

 

f:id:omoshiroamericanews:20210131211404p:plain

 

『差の平均』±『t値』X 『○○』という構図は同じで

『○○』の部分が違う感じに見えます。

 

なぜ違うかというのは講義でも触れられていませんでしたが、

『〇〇』の部分は差異の分散に関することなので、ここの求め方が異なる、

と理解しました。

 

なぜ『○○』の部分が違うのかは④標本数が異なるだからではないかと

実問題を解いていて思いました。

 

f:id:omoshiroamericanews:20210131212454p:plain

出典;Udemy

 

NYのリンゴの10個のサンプルの平均は$3.94で

LAの8個のサンプルの平均は$3.25で平均の差は$0.70です。

平均の差としてはこれが正解です。

 

ただ、差異の分散がどうなっているかと考えたときに

NYとLAでサンプル数が異なっているのはどう考えればいいのだろうと思いました。

 

というのはサンプル数=標本数が10と8のため、

差異が10にもならないし、8で考えるのも不自然になるからです。

 

これがサンプル数が同じ数の前回の日記のような場合だと

サンプル数10同士なので、差異のデータも10個になって、

ばらつき=分散がどうなってるといえますがサンプル数が異なっていると

差異の数が10とも8とも言い難くなると思いました。

 

試しに無理やり差異を10個にしてみました。

 

f:id:omoshiroamericanews:20210131213040p:plain

差異の平均がさっきは$0.70だったのに、今回は$1.345になり

明らかに間違いです。

 

なので無理やり差異を10個、もしくは8個作るのが無理だと思いました。

そうすると差異のデータがそもそもないのでばらつき=分散を考えれないので、

『プールした分散』が出てきたのだと思いました。

f:id:omoshiroamericanews:20210131213255p:plain

 

つまり<④標本数(=サンプル数)が異なる>だと↑の式になるのだと思います。

そして<②2つの母集団は独立>のときに<④標本数(=サンプル数)が異なる>が

起こる可能性が出てくるのだと思います。

前回の日記のように②2つの母集団(投薬前と投薬後)は従属のときは

<④標本数=サンプル数は同じ>になるのだと思いました。

 

今回の日記のパターン

①2つの母集団が正規分布②2つの母集団は独立③2つの母集団の分散は不明

④標本数が異なる

 

 

前回の日記のパターン

①母集団は正規分布②2つの母集団(投薬前と投薬後)は従属=標本数は同じ

③母集団の分散は不明

 

が実務上は一番多いのかと思って日記に書きました。

 

母集団の分散なんて不明なことが多いだろうと思ったのと、

今回の日記は日本とアメリカの○○動向の違いのような地域別分析のようなケースで

使うかなと思いました。

前回の日記はテストマーケティングの前後のようなケースで使うかなと思いました。

 

今回はここまでです。

 

また次回頑張ります!

『差がある』といえるか-統計学-前編

Deep Learning Specializationをうけるためには、

Pythonを理解したほうがいいと思い、このコースに取り組んでいます。

www.udemy.com

 

主目的はPythonに習熟したいだったんですが、コースの1/3を終えても

Pythonは出てこずひたすら確率/分布/統計の勉強となっています。

 

でも統計もやってみたいと思っていたので面白いです。

 

なぜ確率/分布/統計をやるかというとデータサイエンスには

土台として必要なようです。

f:id:omoshiroamericanews:20210117213150p:plain

出典;Udemy

 

肌感覚としては土台として必要というところがわからない点もあります。

ただ、Signateで取り組んだ課題のようにデータが5000のうち347が『1』で

他が『0』という圧倒的に『0』が大きいようなデータの分布が

NeuralNetworkの精度に影響したんではないかと思っていたので面白いです。

 

特に面白いと思っているのが『差がある』といえるか、

どうかの統計学的な裏付けです。

 

とある薬を飲むと血中マグネシウム度が上昇する、

ということを10人の被験者で効果があったかどうか『差がある』といえるかどうか

という問題がありました。

 

f:id:omoshiroamericanews:20210127213508p:plain

出典;Udemy

 

平均だけをみると投薬後が投薬前より増えているから

『効果があった!』と思うのですが、

平均はあくまで平均でデータのばらつきをみながら判断するべきというのが

統計学の考え方のようです。

 

統計学では

①母集団は正規分布

かつ

②2つの母集団(投薬前と投薬後)は従属=標本数は同じ

かつ

③母集団の分散は不明

 

のときは下記の式を用いて投薬後-投薬前の差についての

<信頼区間>なるものを計算します。

f:id:omoshiroamericanews:20210127213925p:plain

出典;Udemy

 

式の詳細はおいといて、<信頼区間>は上限と下限があり

この例では 95%の精度で信頼区間は0.01-0.65となります。

 

つまり投薬後-投薬前は95%の精度で0.01~0.65で+なので

効果がある『差がある』といえるという論理でした。

 

もしも信頼区間が-0.2~5.5であればプラスもマイナスもあるため、

効果があるとは言えない状態となります。

 

-0.2というのは投薬後が投薬前より血中マグネシウム度が下がっているので、

薬が効いていないということになるからです。

 

信頼区間の式を私なりに説明したものです。

f:id:omoshiroamericanews:20210127215552p:plain

理解に時間がかかったのが<t値>と<差異の標本標準偏差>です。

 

t値を理論も何もなく求める方法を先に書きます。

t値は↓の表で定められています。

縦軸が<n-1>です。今回の場合は標本数が10なので9になります。

横軸がα/2です。今回は95%精度なので1-0.95=αなのでα/2は0.025になります。

f:id:omoshiroamericanews:20210127221334p:plain

なので、今回の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分布に基づいています。

絵は↓になります。

f:id:omoshiroamericanews:20210127222030p:plain

出典;Udemy

スチューデントのt分布は正規分布とよく似た形をしていますが、

両端が正規分布より大きくなっています。

これはスチューデントのt分布は標本数が少ないことを前提にしているため、

外れ値やイレギュラーな値の影響を正規分布より大きくうけることを表しています。

標本数が大きくなれば大きくなるほど外れ値やイレギュラーな値は

1/100000とかになって無視できるような割合になりますが、

標本数が少なく1/10や1/20になるとt分布になるということです。

 

t値は標本数が少ないときに使うものですが、

標本数が多いときはz値を使います。

 

おそらく標本数が少ない≒母集団の分散が不明となっていて

③母集団の分散は不明なとき

はt値を使うとレクチャーで言っているように思いました。

 

母集団の分散がわかっているときはz値を使うということだと思います。

 

次に<差異の標本標準偏差>です。

f:id:omoshiroamericanews:20210127215552p:plain

標準偏差というと↓の式と高校の時に習ったのですが

f:id:omoshiroamericanews:20210127224030p:plain

標本の標準偏差というと↓の式になるということです。

f:id:omoshiroamericanews:20210127224056p:plain

 なぜ分母がn-1になるのかわからないのですが、

とにかく母集団全数でなく部分、つまり標本のときはこの式を用いるようです。

 

今回はここまでです。

 

次回は講座内にあった

NYのリンゴの価格とLAのリンゴの価格ではどちらが高いか、ということを

NY10個のサンプル、LA8個のサンプルをもとに考えるという課題の要約に

取り組みます。

 

①2つの母集団が正規分布

かつ

②2つの母集団は独立

かつ

③2つの母集団の分散は不明

かつ

④標本数が異なる

 

どいう条件になります。

 

また次回頑張ります。 

 

 

いつかは取り組みたいCourseraのコース『Deep Learning Specialization』-後半-

Deep Learning Specializationで何を学べるか、ということを今回は見てみたいと思います。

 

前回の日記で書いていた各コースの所要時間とレベルとPyrhonと

Week毎の時間をまとめてみました。

f:id:omoshiroamericanews:20201104002019p:plain

 

どうやら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があるみたいで、

その相関なのか使いどころなのかがよくわかっていないので、

これも事前勉強すると学習期間の短縮=安く受講につながるかなと思いました。

 

事前学習どころがわかったので、どう学習するか次回考えてみます。

 

 

↓コースの説明の貼り付けです。

 

f:id:omoshiroamericanews:20201104005013p:plain

 

 

 

 

 

f:id:omoshiroamericanews:20201104005052p:plain

f:id:omoshiroamericanews:20201104005116p:plain

f:id:omoshiroamericanews:20201104005133p:plain

f:id:omoshiroamericanews:20201104005146p:plain

f:id:omoshiroamericanews:20201104005159p:plain

 

 

 

f:id:omoshiroamericanews:20201104005214p:plain

 

f:id:omoshiroamericanews:20201104005236p:plain

f:id:omoshiroamericanews:20201104005248p:plain

f:id:omoshiroamericanews:20201104005301p:plain

 

 

 

f:id:omoshiroamericanews:20201104005314p:plain

f:id:omoshiroamericanews:20201104005325p:plain

f:id:omoshiroamericanews:20201104005336p:plain

 

 

 

f:id:omoshiroamericanews:20201104005348p:plain

f:id:omoshiroamericanews:20201104005400p:plain

f:id:omoshiroamericanews:20201104005413p:plain

f:id:omoshiroamericanews:20201104005427p:plain

f:id:omoshiroamericanews:20201104005440p:plain

 

 

f:id:omoshiroamericanews:20201104005452p:plain

f:id:omoshiroamericanews:20201104005506p:plain

f:id:omoshiroamericanews:20201104005516p:plain

f:id:omoshiroamericanews:20201104005527p:plain

 

いつかは取り組みたい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で学んだことを「機械学習入門」の内容と対応させてみる - 暇人日記

 

③前処理でデータの乱雑さのエントロピーを対応方針に加えるための勉強をする

エントロピー データ集合Dの乱雑さ - 暇人日記II

 

④Linear Regressionの精度をどう考えるか

Week5までのまとめとLinear Regressionの精度の考え方 - 暇人日記

 

日記振り返りながら足していこうと思います。

 

Coursera Machine Learningで学んだことを「機械学習入門」の内容と対応させてみる

「機械学習入門」を読んでみました。

正確には「フリーソフトウェアで学べる機械学習入門」という本です。

 

読んでいると、『おぉ、これCourseraでやったやつだ!』『Courseraをやったときはこういう位置づけだとは思わなかった』みたいなことがあったので書いてみたいと思います。

 

まず「機械学習入門」ですが構成が↓だと本に書いていました。

 

f:id:omoshiroamericanews:20200921230531p:plain

 

 

Coursera Machine Learningで何を学んだかについては、

こちらの方のブログを参考にさせて頂きます。

私よりよっぽど頭よくて理解されている方で、まとめがわかりやすくて

好きなブログです。

www.ushiji.online

 

 

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以外は対応箇所があると思ったので↓のようにまとめてみました。

 

f:id:omoshiroamericanews:20200926212754p:plain

 

これをみて思ったのはPCAは前処理パートに位置づけされていることに気づきました。

 

Signateの課題を行った時もPCAをやったほうがよかったのかなと思いました。

 

本の第2章に『機械学習の流れ』が図解されていてので、

Courseraと対応させてみました↓

 

f:id:omoshiroamericanews:20200926220522p:plain



 

私が黄金の流れと呼んでいた

①予測式-->②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階層での結果が↓でした。

 

f:id:omoshiroamericanews:20200914211442p:plain



4階層ではこれ以上になるはずです!

結果です↓

 

f:id:omoshiroamericanews:20200914220253p:plain

 

 

あれ!?全然だめですorz

1の数が0って。。。

MAXIterの問題かもしれませんので400まで上げてみます。

 

f:id:omoshiroamericanews:20200914222215p:plain

 

いや、これでもだめでした。

 

なぜだろう。。。

 

もう一度checkinggradinetを見てみます。

前回の日記ではオッケーだったのに誤差が出ています。

 

Week5の課題を4階層で取り組んでcheckinggradientが同じように

不正解かどうかみてみます。

 

 

①10-->7-->5-->3のパターン

f:id:omoshiroamericanews:20200914214906p:plain

不正解です。

 

②10-->7-->5-->2のパターン

 

f:id:omoshiroamericanews:20200914215917p:plain

 

不正解です。

 

③10-->8-->6-->4のパターン

 

f:id:omoshiroamericanews:20200914220607p:plain

 

不正解です。

 

このパターンで深堀して考えてみます。

 

f:id:omoshiroamericanews:20200914221022p:plain

 

数式自体はこうなっています。

 

f:id:omoshiroamericanews:20200914221219p:plain

 

f:id:omoshiroamericanews:20200914221310p:plain

 

という考えでやってみました。

 

数式だとこうですね↓

f:id:omoshiroamericanews:20200914221342p:plain

 

ダメでしたorz

f:id:omoshiroamericanews:20200914221523p:plain

やっぱり正解にはなりません。

 

これはここで一回やめて、色々本を読んでみたいと思います。

また参考になることがあったらトライしてみます!