機械学習③~教師あり学習の流れ~

こんばんは。

機械学習の教師あり学習の流れをまとめてみました。
大体こんな感じかなといった程度のものですが、私の備忘録的な意味でのっけて置きます。

以下簡単に解説。

①は必須のライブラリをインポートする。

②は機械学習に用いるデータなので、手作りでも別のところからcsvを読み込んできても、なんでもいいので、データを用意する。

③はデータを訓練データとテストデータに分割しているが、ここも他のやり方で分割する方法もある。
分割する目的は②で用意したデータ全てを使って機械学習した場合、正しく機能するのかがわからない。そのため、あらかじめ検証するためのデータを確保しておく。
train_test_splitメソッドでは以下のようにデータを分割してくれる。
X_train →75%の訓練データ
X_test   →75%の訓練データの正解ラベル
y_train →25%のテストデータ
y_test   →25%のテストデータの正解ラベル

④は機械学習アルゴリズムをインポートしている。

⑤は③で分割したデータを機械学習させている。

⑥は⑤での機械学習後のX_testとy_testを比較して、どのくらいの精度が出ているかを確認する。

⑦は実際の何かしら予測してほしいデータを機械学習後のデータと比較し、予測を行う。

 

ざっとこんな感じですか。
今後も間違いであったり、気付きがあれば、ちょくちょくこの記事を修正していこうと思います。


機械学習②

こんばんは。

Twitterのほうで投稿しましたが、おたふく風邪になってしまいました。
なんで今また!?子供のころもなったことあるらしいのに!?
年を重ねていくにつれて病気にかかりやすくなっている気がします。健康にはより一層気を付けて生活していかなくてはなりませんね。

機械学習の勉強をぼちぼちとしていますが、だんだんと教師あり学習のパターンというものがわかってきました!

ちなみに最近は「Pythonではじめる機械学習」が難しいのでもっと簡単に機械学習を学ぼうと「見て試して分かる機械学習アルゴリズムの仕組み 機械学習図鑑」という本も用いて学習しています(笑)

 

本書は機械学習のさわりの部分のみの解説書として教師あり学習、教師なし学習の仕組み、方法を紹介されています。そのためコードも項目ごとに1つのみの紹介となっていますが、それが逆にわかりやすいんです!

線形回帰、ロジスティック回帰等それぞれのアルゴリズムの項目で

  • 概要
  • アルゴリズム
  • 詳細

と説明の体裁も整っているため、読みやすいし分かりやすいです。

「Pythonではじめる機械学習」は各アルゴリズムに対し、詳しく書いてあるので、理解が追い付かないときがしばしばありました。
さわりだけ「機械学習図鑑」で学んでいると理解の助けになるので、活用しております。

近いうちに備忘録的な教師なし学習を行う上でやることを簡単にまとめたいなと思います。

それと機械学習を行う上でscikit-learnというライブラリについての説明は結構出てくるのですが、それ以外にnumpy やらpandasやらmatplotlibやらmglearnのライブラリも多用されています。しかし、これらの説明というものがほとんどされていません。
機械学習の理解が若干できるようになったので、これらについてもある程度分かっていたほうがいいかなと思い、Youtubeで学習しました。

↓numpy↓

↓pandas↓

↓matplotlib↓

前回も参考にさせてもらった方の動画なのですが、すごくわかりやすく、使い方を紹介されています。

全て完璧に覚えたわけではありませんが、これらの動画をちょくちょく見返して覚えていこうと思います。

mglearnのライブラリについては「Pythonではじめる機械学習」での学習でのみ使われるものなのかな?そうなのであればこのライブラリはとりあえず、無視でいこう!

ちょっとずつ理解できることが増えると勉強は楽しいです。体調が悪化しない程度にがんばります(笑)


JupyterLabを使ってみた

こんばんは。

本書の学習を進めております。

第2章より機械学習の中の教師あり学習のさまざまな方法について学習をしています。正直内容が全く頭に入ってこない為、コードをひたすら書いて実行をして、次々進めていっていました。

しかし、全く内容を理解せずに本書を進めていくことに意味があるのかと疑問を感じていました。

そこで試しにYoutubeで機械学習について調べてみたところ、動画コンテンツたくさんあるじゃないですか!

そして上記の動画については内容が「Pythonではじめる機械学習」に似ていることから、ものすご~く参考になりました。

むしろ、今まで理解せず打ち込んでいたコードの意味やら使い方等をすべて解説してくれているので、とてつもなく理解が進みました。

今まで一人で参考書読んだり、Webページを見たりして勉強していたので誰かが解説してくれることがこんなにもありがたいことだとは思いませんでした。
スクールに通うと独学の何倍も効率がいいとかよく聞きますけど、確かにそうかもしれませんね。

上記動画の中ではJupyterNotebookを使用し、コードを打ち込んでおりました。
「Pythonではじめる機械学習」でも薦めている方法ですが、見ていてすごく使い勝手が良さそうでした。

正直PyCharmで本書のコードを書いているとごちゃごちゃする上に実行するとグラフ表示とか過去のが一気に出てきてうっとうしくてたまらなかったです・・・

早速インストールしようとJupyterNotebookについて調べてみると現在はJupyterLabというものに置き換わりつつあるということで、JupyterLabを使うことにしました。
またAnacondaをインストールしていれば自動的にインストールされているとのことでしたので、自分のPCの中を見ていると確かにインストールされていました。

あとは起動して使い方を調べるだけで、すぐに使えるようになりました。

まだ操作に慣れない部分はありますが、過去の実行履歴も残るので見返せますし、なかなか使い勝手は良いと感じました。

しかし、PyCharmのようなコードのリファクタリングをぱぱっとやってくれる機能というのはないみたいなので、きれいなコードは自分で書かなければなりません。
私はすべてPyCharmのリファクタリングに頼っていたのでそこはちょっと不便に感じます(笑)

JupyterLabとYoutube動画の新たに2つのコンテンツを導入し、気持ち新たに勉強をしていこうと思います。

今まで終わった部分もすべてやり直し、一から再スタートですね!(笑)


機械学習①

こんばんは。

本書の学習をぼちぼちと進めております。

ひとまず第1章を終えたのですが、何をしているのか全く理解できません・・・

とりあえず書いてあるコードをすべて打ち込んで実行しているのですが、結果が同じになるのを確認しているだけの状態です・・・

そして本書ではコードをIN[番号]、OUT[番号]のように短く区切って都度結果を確認しているのですが、終わったコードを消していたら、載っているコードが動かなかったりして、そこで手が止まります。

このプロット図を表示するのにすごく時間がかかりました。
なぜだ・・・と考えていると、紹介が終わったコードを消したらだめなんだと気付きました。

上のコードの画像の32行~37行が本書のIN[23]のコードでそれだけではエラーとなります。

その前のIN[1]~IN[22]のコードが全体に入っていれば実行できました。

全て繋がっているのか!と本書の学習の目的とは違う部分で学びを得ました(笑)

と、まぁ冗談抜きでコードの意味は全く分からず、書いてある文章すらなんのこと?状態です。そもそも初めてみる関数やら、どの関数がどのライブラリの関数なのか、そもそもこれ関数なのか?みたいなのが多すぎて、もう処理しきれません。

分からなくても学習を進めていくうちに分かるようになるのか、ものすごく不安ですが、ひとまず第1章は終わりました。理解度?

0%です・・・(笑)

学習ロードマップのSTEP2の参考書でこの難しさか・・・
まぁC/C++を学習しているときも最初はこんな感じでしたし、ある時を境に理解できるようになった経験はあるので、本書もぼちぼちとのんびり進めていきますw


機械学習始めます。

こんばんは。

前回の記事で人工知能の概要まで学習を終えました。

現在私が参考にさせていただいている学習ロードマップでいくと、STEP1まで学習を終えたことになります。

https://qiita.com/tani_AI_Academy/items/ab2208e21a2215f8dfad
(上記サイト様の画像を引用させて頂いています)

理解度でいくと70%・・・65%くらいは理解できているかなと思っています!

STEP1を終了ということで、早速STEP2に入る為、「Pythonではじめる機械学習 scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎」を入手しました。

 

パラっと見てみたところ、ちょっと難しそうでしたが、Amazonのレビューを見ていても評価が高かったのと、学習ロードマップでも紹介されていたこともあるので、本書を学習していこうと思います。

まず始めに本書の学習では標準のPythonではインストールされていない以下のパッケージを入手するところからしなければなりません。

scikit-learn
Numpy
SciPy
matplotlib
pandas
IPython
mglearn

しかし、私はPythonの基礎学習時にライブラリパッケージのAnacondaをインストールしていた為、追加でインストールしなければならないのはmglearnのみで済みました。

本書での学習環境にはJupiter Notebookというものを使用するみたいですが、こちらはなんでもいいだろうということで基礎学習のときに使用していたPyCharmで学習をしていこうと思います。

ついに機械学習プログラミングへの一歩を踏み出します!

気合入れていきます!


人工知能技術の概要④

今回も本書の内容を取り上げようと思います。これがラストです!

人工知能はまだまだ全然できていない

 人工知能の研究は1960年~と約60年ほどされてきているが、ディープラーニングが登場したのはここ数年の間であり、まだまだ人間のように本当の意味で物事を判断できる知能はできていない。しかし、今後ディープラーニングの「特徴表現を学習する」という技術を使って、いままでの人工知能の研究がもう一度なぞられるような発展を遂げていくことが予想される。

特徴表現学習ができるようになった先の世界観は社会や産業に大きく影響を与えるものになる。

 10~20年の間でなくなる職業と残る職業というリストもすでにある。短期的(5年以内)ではそれほど急激な変化は起きないだろうが、中期的(5~15年)で生産管理やデザインといった部分で人間の仕事がだいぶ変わってくる。長期的(15年以上先)になると人間でなければならない仕事以外の大部分は機械に置き換えられると予測されている。それは非常に大局的でサンプル数の少ない、難しい判断を伴う業務で、経営者や事業の責任者のような仕事。もうひとつは人間に接するインターフェースは人間の方がいいというようなセラピストやレストランの店員、営業のような仕事である。

 まとめとして短期から中期的には、データ分析や人工知能の知識・スキルを身に着けることは重要である。しかし長期的には人間しかできない大局的な判断をできるようになることや人間対人間の仕事に特化することがいいということになる。そして忘れてはならないのが人間と機械の協調である。人間とコンピュータの協調により、人間の創造性や能力がさらに引き出されることになるかもしれない。そうした社会では生産性が非常に上がり、労働時間が短くなるために、人間の「生き方」、「尊厳」、多様な価値観がますます重要視されるようになるのではないだろうか。

~以下、感想~

 人工知能技術はここから飛躍的に伸びると期待されているのですね。そして今後なくなる仕事が出てくるというのはニュースや記事等でよく目にするものですが、本書ではなくなる仕事と残る仕事ランキング25位まで紹介されていました。私の現在の職業はというと・・・載っていませんでしたw

 将来的に人間とコンピュータの協調により、人間の創造性や能力が引き出されることになるかもという文言には私も大いにそう思います。私が作りたいAIもそういったものですし!

 完璧なAIは必要ないのですが、ちょっとした相談や疑問や処理をぱぱっとやってくれたら余計なことに時間を取られることもないし、やりたいことだけに集中できる。そうなれば脳のリソースを最大限使えるようになるし、個人の生産性は飛躍的に高まると思うんです。

 今の私の仕事もそうですが、不必要な作業や業務が多すぎて、本来求められている仕事に集中できないときがあります。またその不必要な作業や業務に関して、調べなければならなかったり、うまくいかなかったりして、余計時間がかかるんですよね。そしてこういう場合過去に似たような事例があったりするんですよね。AIがこういったことに「過去にこんな事例があるよ」とか「こうしてみたら?」とか解決への道筋を立ててくれるだけでだいぶ違うと思います。常になんでも教えてくれる頼れる人が近くにいてくれて、その人との人間関係を気にしなくていいのであれば、それはもう最高ですよねw

今後のAI技術の発展に期待を込めて、私もその微力となれるようがんばりたいですね!


人工知能技術の概要③

こんばんは。
今日も本書の内容について記載します。

ディープラーニングは人工知能技術のブレークスルー

~機械学習~

 第1次、第2次とブームが過ぎ去った後、ウェブの登場により、再びAIブームが訪れた。第3次AIブームの中で中心となった技術のひとつが「機械学習」。「機械学習」とは人工知能のプログラム自身が学習する仕組みである。ここでいう学習とは「分ける」という処理であり、「分ける」作業はすなわち、ある事象について判断しているといういことである。「機械学習」には大きく「教師あり学習」と「教師なし学習」に分けられる。

・教師あり学習
入力と正しい出力(分け方)がセットになった訓練データをあらかじめ用意して、ある入力が与えられたときに、正しい出力(分け方)ができるようにコンピュータに学習させる。

・教師なし学習
入力用のデータのみを与え、データに内在する構造をつかむために用いられる。データの中にある一定のパターンやルールを抽出することが目的。

機械学習の代表的な分類の仕方

①最近傍法
線を引くよりももっと素朴な方法で、文字通り「一番近い隣を使う」ことであり、一番近いデータのカテゴリーが当てはまる確率が高いはずだという仮説に基づいている。

②ナイーブベイズ法
確率に関する有名な定理である「ベイズの定理」を使って分ける方法で、データの特徴ごとにどのカテゴリに当てはめるのかを足し合わせていく。

③決定木
ある属性がある値に入っているかどうかで線引きする。複数の属性を組み合わせた条件をつくることができない。

④サポートベクターマシン
マージン(余白)を最大にするように分ける。精度は高く、よく用いられているが、大きなデータを対象としたときは計算に時間がかかってしまうという欠点がある。

⑤ニューラルネットワーク
上記①~④のように純粋に機械学習の分けるという「機能」をエレガントな方法で実現しようとしているのに対し、人間の脳神経回路をまねすることによって分けようというもの。学習する過程で重みづけを変化させ、最適な値を出力するように調整することで、精度を高めていく。

 

~ディープラーニング~

 ディープラーニングは人間が特徴量を設計するのではなく、コンピュータが自ら高次の特徴量を獲得する。第1次、第2次AIブーム、そして機械学習は人工知能の黎明期(約1960年)からの最初の10年~20年の間に技術基盤が出来ていた。しかし、ディープラーニングに代表される「特徴表現学習」は黎明期の革新的な発見・発明に匹敵するような大発明である。特徴表現をコンピュータ自ら作り出すことはそれくらい大きな飛躍。とはいえ、ディープラーニングによって人工知能が実現するというのは短絡的すぎる考えである。

 ディープラーニングとは多階層のニューラルネットワークであり、機械学習のニューラルネットワークを発展させた技術。従来の機械学習と大きく異なる点が2つあり、1つは1層ずつ階層ごとに学習していく点、もう1つは自己符号化器という情報圧縮器を用いること。

 実際ディープラーニングのアイデアに近いものは昔からある。しかし、得られる特徴量や概念の頑健性の構築にはマシンパワーが必要であり、10年以上前のマシンパワーでは実現困難であった。しかし、現在の飛躍的に高まったマシンパワーによってニューラルネットワークを多段にして、高次の特徴量を得ることが可能になってきたのである。

~以下、感想~

 私はディープラーニングは機械学習の中のひとつの技術だと思っておりましたが、本書では機械学習とディープラーニングの違いとディープラーニングのすごさについてとても詳しく書いてあり、勉強になりました。

しかし、現在世間をにぎわせているディープラーニングの技術自体も昔に考えられていて、マシンパワー不足から実現できずにいたということで、やっと時代が技術に追いついてきたということですね。いろいろな分野の技術が上がり、過去の技術が生きてくるということは今後もたくさんありそうですね。これは歴史を勉強すればいいアイデアが眠っているかもしれませんね・・・

まぁアイデア云々の前にひとまずは機械学習とディープラーニングを使いこなせるようにならないとですね・・・
機械学習の中でもいろいろな分け方があり、それぞれ適した使い方があるのでしょう。その辺勉強して使いこなせるようになりたいですね。

次回も本書の内容について書いていきたいと思います。


人工知能技術の概要②

こんばんは。

「人工知能は人間を超えるか ディープラーニングの先にあるもの」を読み進めております。

前回の記事でパラパラ読みした際に気になった点について、記載していこうと思います。

人工知能には過去2回のブームがあった。

~第1次AIブーム~

 1950年代後半~1960年代に第1次AIブームが起きた。この時代では主に「推論」「探索」の技術が中心となっていた。一見すると知的に見えるさまざまな課題をコンピュータが解決していったが、冷静に考えると非常に限定された状況でしか問題が解けなかった。迷路を解いたり、パズルを解いたり、チェスや将棋など明確に定義されたルールの中で戦うものならともかく、現実のもっとずっと複雑な問題は解けなかった。人間の知能の体現をコンピュータで実現することの奥深さがわかったのが、第1次AIブームであった。

~第2次AIブーム~

 1980年代になると推論・探索のシンプルなルールで人工知能を実現しようとした第1次ブームとは異なり、「知識」に着目した第2次AIブームが勢い出してきた。「病気に関するたくさんの知識」をコンピュータに入れておけば医者の代わりに、「法律に関するたくさんの知識」を入れておけば弁護士の代わりになるというように現実の問題を解く実用的な「エキスパートシステム」が中心となった。「エキスパートシステム」ではうまくいく例もあったが、問題もあった。それは専門家から知識を取り出さなければならないこと、また覚えさせなければならない知識の量、常識レベルの知識の表現であった。「知識」を扱うさまざまな研究がなされる中で出てくる山積みの問題に対し、「結局AIは夢物語なのかもしれない」と悲観的な観測が広がり、第2次AIブームは終わりを迎えた。

~以下、感想~

そして現在、機械学習、ディープラーニングを中心に第3次AIブームを迎えているわけですね。

1960年というと今からおよそ50年前ですか・・・そんな時代から人工知能を作ろうとしていたのですね。頭のいい技術者達が50年かけても実現できていないとは・・・

そそるぜこれは・・・w

過去の偉人たちの残してきてくれた研究結果や情報を今の時代の人たちはインターネットの力で確認できるわけですよね。ITの大企業は集の力で人工知能技術を高めているのでしょうが、個の力でも十分に戦える環境はあるわけですよ!

この本読んでいて理解できない理論や文言もたくさん出てきますが、まぁそれはいずれ理解できるようになるでしょう。諦めずに勉強を続けていれば。

次回も本書で気になった点について書いていこうと思います。


人工知能技術の概要①

こんばんは。

Pythonの基礎学習を終えたので、以下のサイトの学習ロードマップ通り、これから人工知能について学習していきたいと思います。

追記 Pythonや機械学習がオンライン上で学べるAI Academyをnoteでも書きましたが、3/17日からほとんどのコンテンツを永続的に無料で利用できるよう致しましたので、是非この記事と合わせて使って頂けますと幸いです! ...

人工知能のプログラミング学習を始める前にまずは人工知能の概要を学ばなくてはならないということで、上記のサイトでおすすめされている本を買ってきました。

まだパラパラとしか読めていないのですが、本書は著者自身が人工知能開発に人生をかけているということで、すごく説得力がありそうです。

パラパラ読みで気になった点を記載しておきます。

  • 人工知能には過去2回のブームがあった。
  • ディープラーニングは人工知能技術のブレークスルー
  • 機械学習は結構前からある
  • 人工知能はいうほど全然できていない

人工知能技術の歴史から現在の到達レベルまで学べそうなので、しっかりと本書で人工知能の概要を勉強したいと思います。


Python基礎学習③

こんばんは。

本書にてライブラリとクラスについて学び終わりました。

まずクラスについてですが、C++と違ってprivateなメンバ変数というのが厳密にはないというのに驚きました。

変数の前にアンダースコアを2つ付ければ、private変数ということにする等、クラスのカプセル化を運用で回避というのが、C++とはすごく違うなと。
C++はこういった定義は厳密にされていたので、この辺はC++の考え方がしっくりきますね。運用で回避というのは間違いが起きる元ですもんね。

しかしPythonではPEP8というコーディング規約の考え方がプログラマーの方やIDEにもしっかりと浸透しているみたいなので、問題ないのかな?この辺もまたC++のコーディングの仕方がプログラマーそれぞれで違うという自由な感じと違うところですね。

クラスの継承については「子クラス(親クラス)」で記述がすむので、分かりやすくていいなと思いました。C++は継承もprivateなのかpublicなのかprotectedなのか、どう継承するか選べますもんね。

なんでも自由に細かく決めれるC++はやはり上級者向けだったのですね。
私もいずれはC++を使いこなせるようになりたいものです!

 

ライブラリについては最高によく出来た仕組みだなと感じました!

C/C++でいうとこの#includeみたいなノリなのでしょうけど、いろいろな種類のライブラリが気軽に使えてなんと便利なことでしょう。

GUIのプログラムを作るならこのライブラリ、Webアプリを作るならこのライブラリ、画像処理するならこのライブラリとなんでもあるし、使い方も簡単だし、すごいです!

C++でもこういうライブラリ群が気軽に使えればいいのにねー。

ライブラリをインストールする方法もIDEのコンソール画面で「pip install ライブラリ名」で勝手に取ってきてくれるし、すごく楽ですね!

ちなみにC++でプログラムを作っていたときにはまった時間取得もPythonの時間ライブラリで簡単に取得できました。

Pythonは簡単だけど、本格的なプログラミングも可能というのはこのライブラリが豊富にあることと使いやすいということが支えているんですね。

さて、ひとまずPythonの基礎的な文法や仕様について学習し終えました。
PythonにはポインタやテンプレートやSTLがなかったり、C/C++より細かい部分の覚えることが少なくて、基本的なことだけでいえばぼちぼちやっても2週間くらいで学習を終えれました。

Pythonでは作りたいアプリは大概作れることを知りましたが、私としては人工知能を作りたいということで、当初の道筋通り進んでいきたいと思います。


スポンサーリンク
広告1
広告1