Higu`s diary

新米データサイエンティストのブログ。技術についてゆるく書きます〜

機械学習を基礎から見直すためにPRML(パターン認識と機械学習)の学習を始めてみた話

 

f:id:zerebom:20190115220651j:plain


こんばんは、ひぐです。

 卒論と学会論文とインターン(楽しい)のプロジェクトがかぶって、泡吹いています

 

今日はPRMLをやっていくぞという話をします。

 

難しい難しいとさんざん言われていますが、

数学苦手な自分なりに取り組み方がすこしわかってきたので、他の人の参考になればなと思います。

 まだ、やっている途中なので間違った表記や表現が含まれる可能性があります。(T_T)

 

自分のスペック

・地方国立大4年

・入学後は3年生の秋までサークル漬けでした

・学部はゴリゴリの理系(工学・情報系)だったので大学の

 線形、微積分、確率はやったことはある(一夜漬けばっかでしたが)

・数学は結構苦手(センター数Ⅱ54点…)

・いろいろな参考書を買うけど、どれも味見程度(はじパタ、0からDL、達人サイエンティストによる理論と実践などなど…)

 

PRMLってなに?

これです。下巻もあります。

 

割と網羅的に理論を追って機械学習について根っこから解説されており、

名著と呼ぶ方も多くいらっしゃいます。

 

ただ、線形代数、確率論、微積分などの計算量がかなり多く、挫折者を多く生んでいるとか汗

なんで始めようと思ったの?

 

自分は5月ごろから機械学習の勉強を始めました。

 今まではいろいろな参考書やQiitaをちょっとずつかじったり、

kaggleをすこーしだけやって勉強していました。

 

知識が飛び飛びで難しいモデルに対してはよくわかんないけどとりあえずコードコピペしちゃえ!

みたいな感じだったのです。

 

しかしこれではいつまでたっても本質的な力はつかないなと思い腹をくくって始めました。

 

あとは、自分は勉強をかなり適当に済ませて、やった気になる癖があるので

2019年はそういうのをなくしていきたい!と思い、重めの本を腰を据えてやることにしました。

 

 

 

どうやって進めているの?

今の自分だとこの本だけだと、かなり厳しいので随所調べながら進めています。

仮にも理系の4年生だというのに出来ないのは悲しいですが、今までのツケを支払っていきたいと思います;;

 

具体的には一つずつ数式を追っていき、理解できない式展開が行われた場合は手計算をしてみるといった感じです。

1ページに30~50分くらいかかるときもあります。

 

有名な本で勉強会が多く開かれているため、slideshareなどの資料を参考にすると良いと思います。

 

また、過去にこの本を読み進めるにあたって必要な数学の知識をPDFに

まとめてくださったかたがいらっしゃいます。(神)

 

こちらも参考にしてみてはいかがでしょうか。

パターン認識機械学習の学習という名前ですw)

d.hatena.ne.jp

 

また、PRMLを進める前にベイズについて勉強しといたほうがいいよといわれたので、事前にこの本でベイズ統計については学んでいました。

 

この本はかなり丁寧なのでおすすめです。僕的には結構難しかったです。

 

 

 

現在の進捗

1章をサラッと進め、2章をじっくりやっています。

2.3くらいまでは終わりました。

 

今年度中には終わらせたいです。

 

感想

確かに難しいですが、きっちりやればかなり力がつくと思います。

 

そして今まで何となくの理解だった部分が腑に落ちた!

ってなる部分がいっぱいあります。

 

例えば、

多次元曲線で過学習が起きるのは各係数が非常に大きくなるからとか、

ガウス分布最尤推定は、MSEの最小化と一致するとか

ベータ分布は二項分布の事前分布として導入するとすっきりする、とか…!

(↑このあたり間違ってたらごめんなさい)

 

kaggleや最新の研究では主流じゃないようなすこし古いモデルや、手法も出てくるので

効率的でないと思った節もあったのですが、

 

この本の意義としては、

機械学習、深層学習で必要になってくる数学の知識と理論を一定水準まで引き上げられる。

 

ことだと思います。ですので、式展開とかもちゃんと追っていきたいです。

この本が読み終われば、大抵の論文の式変形などにウッってならなくなりそうです。

 

 

 

 

 

 

まとめ

 

サクッっと書かせていただきました。

 研究室の先生にはいつも

「わかるとは『人にわかりやすく説明できる』こと」

と言われているので、とりあえず流して終わったぞ~ってならない様にブログで

アウトプットできたらなと思います💦

 

そんなこんなでやっていくぞという気持ちです、途中でやめない様に記事にしました。

一緒に勉強してくれる人も募集しております。

 

では~

 

 

 

 

 

 

 

windowsでpythonから管理者権限が必要なことを実行する方法

こんにちはひぐです!

 

きょうはニッチな情報なんですが、

windowspythonを使って管理者権限が必要なことを実行する方法を紹介します^^

 

 

動機

pythonからIPアドレスを変更する方法したかったのですが、

要求された操作には、権限の昇格が必要です。管理者として実行してください。

と出てしまう

 

windowsでは、管理者としてログインしていたとしてもネットワークの設定を変えるには認証がいるようです。

 

今回の記事では、IPアドレスを変更する方法を例にタイトルの内容を紹介していきたいと思いますm(__)m

 

GUIで変更する方法

普通の使い方をする人はこれで大丈夫だと思います。

そして非常によくまとまっていた記事があるので、丸投げします()

pc-chain.com

 

コマンドプロンプトIPアドレスを変更する方法

 

まずはコマンドプロンプトを管理者権限で開く(右クリックより選択)。もしくは、

powershell start-process cmd -verb runas

と打つ。

参考:コマンドプロンプトから管理者権限のコマンドプロンプトに切り替える - Qiita

 

これは、

powershellを起動し、コマンドプロンプト(cmd)を管理者権限(ruans)で

  実行する(start-processes)」

という意味になります。

 

そうすると、管理者と書かれたコマンドプロンプトが別に開くので、

 

netsh interface ip set address "接続名" static xxx.xxx.xxx.xxx(IPアドレス) xxx.xxx.xxx.xxx(サブネットマスク) xxx.xxx.xxx.xxx(デフォルトゲートウェイ) 

 

と入力します。

参考:[メモ][Windows] コマンドラインでIPアドレスを変更する | Nobwak's Lair

 

 

サブネットマスク/デフォルトゲートウェイとはなんぞ?

という方のためにリンクを貼っておきます。↓

サブネットマスク(subnet mask)とは?

デフォルトゲートウェイって何? |【エン転職】

 

そして、コマンドプロンプト内で

ipconfig /all 

 と打って、IPアドレスが変更されているのを確認します。

 

 

pythonIPアドレスを変更する方法

前置きが長くなりました、本題に移ります!

pythonコマンドプロンプトのコードを実行するにはsubprocessを使います。

import subprocess
cmd='hogehoge'
subprocess.call(cmd,shell=True)

とすればOKです。

参考:17.5. subprocess — サブプロセス管理 — Python 3.3.6 ドキュメント

 

しかし、pythonで'powershell start-process cmd -verb runas'を打ったとしても

別ウィンドウが開くだけでsubprocessでの操作が管理者権限になるわけはないです涙。

 

ここではかなり頭を悩まされましたが、

バッチファイルを作成しそれを起動させるということにしました。

 

※バッチファイル…クリックするとそのコードをコマンドプロンプトで実行するファイル。

         メモ帳などで書き、拡張子を.batにすれば完成する。

 

参考:必要に迫られてバッチファイルを組むことになった人向けのTips - Qiita

 

 

参考になったのは以下の記事です!

piyopiyocs.blog115.fc2.com

 

具体的な方針

  1. 管理者権限でコマンドプロンプトを開き○○というコードを実行するという
    バッチファイルAを作る
  2. 実行したい○○というコードが書かれたバッチファイルBを作成する
  3. pythonからバッチファイルAを実行するという指示を飛ばし、
    本来の目的であるバッチファイルBの内容を実行する

 

バッチファイルAの中身

powershell.exe -Command Start-Process """%1""" "%2" -Verb Runas

"""%1""" "%2"は引数です。%1は実行したいバッチファイルBのパス、%2はバッチファイルBに渡す引数です

-------------------------------------------------------------------------------------------------------------------

 

 

バッチファイルBの中身

@echo off
netsh interface ip set address "イーサネット" static xxx.xxx.xxx.%1(IPアドレス) xxx.xxx.xxx.xxx(サブネットマスク) xxx.xxx.xxx.xxx(デフォルトゲートウェイ) 

 

@echo offは実行したときに、コマンドプロンプトでコードを表示しないという指示になります。

今回はIPアドレスの最終桁を変更したかったので%1(バッチファイルAからみると%2)を渡しました。

-------------------------------------------------------------------------------------------------------------------

 

 

 

そして、pythonには以下のように記述をします

cmd4=fr'バッチファイルAのパス バッチファイルBのパス {IPアドレス下1桁(int)}'
    subprocess.call(cmd4,shell=True)

 

これでOKです!

 

役に立つ人がいるか微妙な記事ですが、

3日前の俺からしたらのどから手が出るほど欲しい記事なので書きました笑

 

たぶんmacならsudoで一発なんだろうなぁ(涙)

 

めちゃくちゃネットワーク周りには疎かったのですが、

紆余曲折したおかげでちょっとだけTCP/IP周りに詳しくなりましたw

 

もっといい方法ありそうなので、もし知っている方がいたらコメントしていただけたら幸いです!

 

 

では~

統計検定2級に受かったので勉強法等色々纏めてみた

お久しぶりです、ひぐです。

今回は統計検定2級についての記事です!

 

大体1か月半くらいで取得することが出来ました。

将来データサイエンティストになりたいな、

と最近ぼんやり考えてきたので勉強を始めたといった感じです。

 

資格を取ることは初めてだった(英検4級だけもってる)のですが、

統計検定はネットから気軽に応募できる上に良問といった感じで、

とても受験してよかったなと思っています!

 

 

今回の記事では 以下のようなことを紹介したいと思います↓

 

 

統計検定何が魅力なの??

↑これが一番伝えたいので、最初に持ってきます!

まず、個人的に統計ってのはめちゃくちゃ大事な学問だと思っています!

www.diamond.co.jp

 

昔はデータを集める、保管しておく、扱うということは凄く難しいことでしたが

WEBが発達した今はビックデータを集めることが出来るようになりました。

統計はデータが多いほど真価を発揮する学問なのでこれからの時代、これまで以上に、役立つかと思います。

 

最近はやりの機械学習/人工知能統計学がもとになりたっていますから!

(語弊あるかも)

 

そして、2級まではCBT方式といって全国各地で受験できる上に、

日程を選ぶことが出来ます!

なので、やる気が出たら勉強→即受験なんてかんじに気軽に受けられます!

 

さぁ、みんなもLet`s統計!

(回し者じゃないです)

 

 

統計検定とは?

 

公式サイトはこちら

www.toukei-kentei.jp

統計検定は

 

「統計検定」とは、統計に関する知識や活用力を評価する全国統一試験です。
データに基づいて客観的に判断し、科学的に問題を解決する能力は、仕事や研究をするための21世紀型スキルとして国際社会で広く認められています。
日本統計学会は、中高生・大学生・職業人を対象に、各レベルに応じて体系的に国際通用性のある統計活用能力評価システムを研究開発し、統計検定として実施します

 

とのこと。日本統計学会が実施している全国統一模試です。

 

みんな受けてるの?

これくらいの人が受けているそうです。↓

4級~1級の累計

統計検定の記録(分布)|統計検定:Japan Statistical Society Certificate

f:id:zerebom:20181214230348p:plain

 

 

大体毎年5000人くらい受けているそうです。

最近はCBT方式も開始されたので、

このグラフよりは増えているかと思います。

(このグラフはおそらく、定期開催で受験した人だけ)

 

ちなみに、基本情報技術者試験は年間10万人程度受けているようです…!

統計情報|基本情報技術者試験.com

受けた身としてはこれくらいメジャーになったらいいなぁって感じですw

 

2級ってどのくらいの難しさなの?

統計検定とは|統計検定:Japan Statistical Society Certificate

f:id:zerebom:20181214231206p:plain

 だいたいこんな感じです。

 

2級は理系の学生なら比較的取りやすいけど、

数学から離れていた人だとわりと勉強しないといけないかなって感じです!

 

見た感じ、

1級>>>準1級>>>>>>>>>>2級>>3級>4級

って感じがしました。(笑)

 

 

 

数学の知識は数2B あたりまでがしっかりわかっているといいかなと思います。

最低限

  • 平方根・乗数・対数の意味、計算方法
  • 簡単な微積
  • 条件付き確率、組み合わせの計算

などが身についていれば後述する統計WEBを見ても???ってならずに進められると思います。

 

 

どうやって勉強したらいいの?

 

自分は

  1. (全体把握)統計WEBを暇な時間に流し読みで1週
  2. (詳細理解)統計WEBで詰まったところをノートにまとまる
  3. (実践になれる)過去問を解く
  4. (苦手を埋める)わかんないとこをノートにまとめる
  5. (残りは気合で暗記)ノートと統計WEBをずっと見る

 

って感じで進めました

 

統計WEBとは?

bellcurve.jp

 

なんと、こちらのサイトで統計検定2級までの範囲は全て網羅することが出来ます!

累計200ページ以上にわたって詳細に紹介しているので、

まずはこのサイトを流し読みすることをお勧めします。

 

 

その後過去問を解きましょう

 

www.toukei-kentei.jp

 

受けた時の感想

受かるのはめっちゃ簡単?

まず、統計検定は60点が合格ラインなのですが、

60点は比較的簡単に取ることが出来るかと思います。

 

なぜならば、

  • 五択問題なので半分しかわからなくても残りは当てずっぽうで6割に届く
  • 簡単な問題とそうでない問題がはっきり分かれているので、簡単な問題だけミスらなければ難しい範囲(分散分析/重回帰分析等)がわかってなくても受かる

 

からです!

 

つまり80点取るのと、60点取るのでは難易度がかなり違います。

 

 

今後も1級を目指したり研究/業務で使うつもりの人は高得点を狙うことを目標に

したほうが良いと思います(とか言って僕は70点でした

 

CBTと普通の問題の質が微妙に違う

これは受けてから気づいたのですが、

 

普通の試験

  • 大問8~10こ×小問3~4こずつ

みたいな形式ですが、

 

CBT試験は

  • 小問30こ+大問2こ×小問2こ

みたいな形式でした!

 

なので、通常の過去問で勉強した人はCBTで受ける際にCBTの過去問を少し見ておくと面を食らわないかなと思います。

 

出題方法の性質上、CBTの方が論理より知識を問う感じがしました。

  • 2標本の母平均・母分散の95%信頼区間の求め方
  • さまざまな確率分布の式

などがたくさん出てきました。

 

その他CBT試験の豆知識
  • 時計を忘れたのですが、左下に書いてありました。(助かった)
  • 油性のマッキーとプレート2枚を渡され、計算用紙として使いました
  • 予約してから試験までには1週間のスパンが必要&試験5日前には振り込む必要がある
  • 合格後、合格証がその場で印刷してもらえる(各分野の正答率も書いてある)

 

 

以上です。

こんな感じです、わかんないことがあったらTwitterでも聞いてくれればと思います!

 

では~

 

 

 

 

 

 

Amazonの合計利用金額を自動で算出する方法

f:id:zerebom:20181110102422p:plain

こんにちは、ひぐです!

 

突然ですが、Amazonの商品購入のスムーズさってやばいですよね。

欲しいと思ってるうちに手が滑って、気づいたら家に届いてるんすよね。

 

Amazonの滑らかなUIによって、

僕の財布の紐はひもQ並みにゆるゆるになってしまいました。

 

今回はAmazonでの使いすぎを防ぐべく、

Pythonを用いて「Amazonの合計使用金額を算出」する方法を紹介します。

使用金額を確認して無駄遣いを減らしていきましょう:D

 

この記事はこの本を参考にしました

gihyo.jp

 

 

 

コード全文

import sys
import os
import re
from robobrowser import RoboBrowser

# 認証情報は環境変数から取得する。
AMAZON_EMAIL = os.environ['AMAZON_EMAIL']
AMAZON_PASSWORD = os.environ['AMAZON_PASSWORD']

# RoboBrowserオブジェクトを作成する。
browser = RoboBrowser(
    parser='html.parser',  # Beautiful Soupで使用するパーサーを指定する。
    # Cookieが使用できないと表示されてログインできない問題を回避するため、
    # 通常のブラウザーのUser-Agent(ここではFirefoxのもの)を使う。
    user_agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0')


def main():
    # 注文履歴のページを開く。
    sum_money=0
    print('Navigating...', file=sys.stderr)
    browser.open('https://www.amazon.co.jp/gp/css/order-history')

    # サインインページにリダイレクトされていることを確認する。
    assert 'Amazonログイン' in browser.parsed.title.string

    # name="signIn" というサインインフォームを埋める。
    # フォームのname属性の値はブラウザーの開発者ツールで確認できる。
    form = browser.get_form(attrs={'name': 'signIn'})
    form['email'] = AMAZON_EMAIL  # name="email" という入力ボックスを埋める。
    form['password'] = AMAZON_PASSWORD  # name="password" という入力ボックスを埋める。

    # フォームを送信する。正常にログインするにはRefererヘッダーとAccept-Languageヘッダーが必要。
    print('Signing in...', file=sys.stderr)
    browser.submit_form(form, headers={
        'Referer': browser.url,
        'Accept-Language': 'ja,en-US;q=0.7,en;q=0.3',
    })

    # ページャーをたどる。
    while True:
        assert '注文履歴' in browser.parsed.title.string  # 注文履歴画面が表示されていることを確認する。
        print(browser.parsed.title.string)

        sum_money+=print_order_history()  

        link_to_next = browser.get_link('次へ')  # 「次へ」というテキストを持つリンクを取得する。
        if not link_to_next:
            print('直近半年のAmazon使用合計金額は')
            print(str(sum)+'円です')
            break  # 「次へ」のリンクがない場合はループを抜けて終了する。

        print('Following link to next page...', file=sys.stderr)
        browser.follow_link(link_to_next)  # 「次へ」というリンクをたどる。


def print_order_history():
    """
    現在のページのすべての注文履歴を表示する。
    """
    # ページ内のすべての注文履歴について反復する。ブラウザーの開発者ツールでclass属性の値を確認できる。
    sum=0
    for line_item in browser.select('.order-info'):
        order = {}  # 注文の情報を格納するためのdict。
        # 注文の情報のすべての列について反復する。
        for column in line_item.select('.a-column'):
            label_element = column.select_one('.label')
            value_element = column.select_one('.value')
            # ラベルと値がない列は無視する。
            if label_element and value_element:
                label = label_element.get_text().strip()
                value = value_element.get_text().strip()
                order[label] = value  # 注文の情報を格納する。

        print(order['注文日'], order['合計'])  # 注文の情報を表示する。
        price=re.sub(r'¥ ' ,'',order['合計'])
        price=re.sub(',' ,'',price)


        sum+=int(price)
    return(sum)

if __name__ == '__main__':
    main()

 

 

コードの概要

Robobrowserというライブラリを用いてブラウザを開き、

フォームに情報を入力し、ログインする。

その後、値段が記載されているCSSの特定の要素を選択し、

for文を用いてページ内の商品を全て取得し合計を出力する。

 

細かい説明

 

RoboBrowserってなに?

RoboBrowserはヘッドレスブラウザ(画面が表示されないブラウザ)です。

ブラウザの動きをコードで指定し、自動で動かしてくれるライブラリです。

ヘッドレスブラウザはいくつもあるのですが、robobrowserは

フォームの入力など簡単にできます

GitHub - jmcarp/robobrowser

 

ちなみに、RoboBrowserでCSSタグを取得するときは、

HTML構文解析ライブラリのBeautiful Soupと同じ記法で出来ます。

kondou.com - Beautiful Soup 4.2.0 Doc. 日本語訳 (2013-11-19最終更新)

 

os.environってなに?

今回のコードはAmazonにログインするため、メアドとPWが必須になります。

コードに直接個人情報を書き込むのは危険なため、os.environによってローカルの別ファイルに保存してある文字列を読み込んで、実行します。

 

詳しくは

note.nkmk.me

 

実行結果

f:id:zerebom:20181110102200p:plain

 

使いすぎワロタ

 

おわり

6ヶ月プログラミングをして出来るようになったこと/勉強法をまとめてみた

  • どうもひぐです!

 

今日はそろそろプログラミングの勉強を始めて半年たったので、

今までやってきたことを纏めていきたいと思います!

 

この記事は半年勉強してきてダレてきた自分に喝を入れつつ、

こんなに頑張ってきたじゃん!ナイス!と自分をほめるために書きます。

 

半年勉強してみて、もっとこうすれば良かった/こうして良かった

って事が見つかってきたので、

これから勉強する人は参考にしていただけたらと思います! 

 

推奨する読者層

  • プログラミング始めたいけど何からやればいいかわからない人
  • 自分もプログラミングの勉強を始めたけど、どういう進路でやればいいかわからない人
  • ほかの人がどうやって勉強しているのかなって知りたい人

 

 

4月/5月

詳しくは以下の記事に

 

 

zerebom.hatenablog.com

 

プログラミングの勉強を始めました。

1週間でProgateのレベルを100まで上げたり、

AidemyのインターンPythonを毎日10時間くらい勉強したりと、

この時期が一番集中してできていました。

 

6月

インターンをし始めて、先輩の方々がReactをやっていて、

自分もフロントエンドに携わりたいなと思い勉強をし始めました

 

また研究室に配属されて、しっかり成果を出さなくてはいけない時期になってきたので

Pythonによる研究も始めました

 

あとは100DaysofCodeを始めました。

これでつぶやくと、自分が何をしている人なのかアピールできるので、

似たことをしている人と交流が出来ていいですよ!

 

 

7月

研究とインターンPythonを扱うものの、Reactが面白くて割と触っていました。

 

  • フロントエンドエンジニアとして働きたい
  • 高給なインターンや学生バイトはWeb系のフレームワークが使えるとよさそう
  • Python等のデータ分析を出来るバイトは少ない

 

等の理由からReactを勉強していました

 

 

この時期にブログをちゃんと書き始めるようになったのかな?

 

8月

大学院の入学試験があったのでプログラミングは一回お預けになりました。

この時勉強した内容は

つまんないな~と思っていたけど、のちのち機械学習ディープラーニングを勉強する

うえでめっちゃ役立ちました。特に線形とか!

 

大学の1年で学ぶ数学は本当に応用範囲が広いので、

一年生の人はちゃんと勉強しようね!

 

9月

無事院試に合格したので、自分の興味ある分野をしっかり勉強し始めました。

9月はかなり勉強にコミットできました。

 

アプリを作ったり、Qiitaを書いたり、アウトプットを意識したのが良かったです

 

データ分析のKaggleにもチャレンジして、

しっかり分析結果をアップロードできるようになりました。

 

10月

あっという間に半年が経って焦ってきました💦

自分の大学の研究に自信が持てなくて、うーんという感じです。

とりあえず早めに卒論をかけるように頑張っていきたいです。。。!

 

出来るようになったこと/成果物まとめ

 

AdobeXD

HTML

CSS

Bootstrap4

簡単なシングルWebページをデザインから一貫して書けるようになった。

 

zerebom.hatenablog.com

 

 

Python

Flask

Keras

↑上のWEBページに製作スキルと合わせて画像認識アプリを作成した

 

zerebom.hatenablog.com

 

Kaggle(データ分析のコンペ)

Pandas

Numpy

sklearn

前処理の基本的な方針を掴むことが出来た。

欠損の少ないデータなら自分で調べながら進めることが出来るようになった。

 

React/Redux

基礎を学んだ、カンバン式Todoアプリを作成中(たぶん出来ない)

 

ブログ

月間1000PVくらいになった!(ありがとうございます!)

 

その他

Git/Githubを使えるようになった(add,push,commit,checkoutくらいしか使わんけど)

HerokuにWebアプリをデプロイできるようになった

Qiitaに記事をのっけた

qiita.com

もくもく会に参加するようになった

エンジニアの友達増えた!

ブログのおかげで文章をほめられることが増えた

(工学系生徒の文章が書ける、という基準はむちゃくちゃ緩い)

 

勉強して気づいた事

 

・まずは一つの分野に絞った方がいい

プログラミングを勉強する前は

どんな言語であれプログラミングを勉強する→色々とパソコン・ITとかに強くなる

 

だと思っていたのですが、実際は

 

目的に沿った言語を選び、その目的に対して勉強する→その分野が出来るようになる

➝他の分野を勉強する&その分野を深く知る➝だんだん強くなる

 

です。

プログラミングの勉強って言うのは、

分野ごとに全然要求される知識が違う&使いどころが違うのです。

 

プログラミングを勉強する方の中には、

「流行ってきたし、教養として身に着けたい」とか

「とりあえずよく聞くPythonでもやりたい」とかいう動機があると思うのですが、

 

Progateの講座を全言語勉強する、みたいなやり方は

「英語と中国語と韓国語とイタリア語のあいさつの仕方だけ勉強する」

みたいな感じになってしまいあまり役に立ちません。

 

つまり、プログラミングを勉強して何が出来るようになりたいか考え、

出来るようになったことで何に活かすかまで考えられるといいですね!

 

 

僕もフロントエンドと機械学習両方やって、片方忘れていって

もったいなかった部分は結構あります💦

 

 

 

・アウトプットして初めて出来たといえる

他人が自分の事をプログラミングが出来るかどうかを判断するにはどうしたらいいでしょうか?

 

成果物を見るしかありません!

 

結構受験勉強みたいにインプットばっかりになっちゃう人が多いと思うのですが、

あやふやでもいいから形にしてみる!

というのがプログラミングでとにかく大事です。

 

Reactの勉強は結構やったのですが、

結局アウトプットできずどんどん忘れてしまったのでもったいなかったです。

 

アウトプットするまでが学習!と思って取り組みましょう!

 

 

・人に会う/頼るのめっちゃ大事

勉強し始めたころはその分野で自分より詳しい人が絶対いるので

すぐ頼りにしちゃいましょう!

自分で悩むより絶対早いです

 

その時は、次同じレベルの疑問がわいたらどうしたらいいか?も聞けるといいですね。

先輩エンジニアはどうやって課題解決の方針を立てているのか?を知れると、

次は自分で解決できるかと思います。

 

相手に迷惑かも・・・?としり込みせずにどんどん聞いて成長しましょう!

そして成長したら、自分より下のレベルの人に教えてあげましょう!

 

人に会うのもとても大事です!

自分より強い人見ると燃えるし、どうやって勉強すればいいかの指標になるかと思います!

共通の趣味の人ってだけで盛り上がるしね!

 

 

 ・プログラミングが必要な環境に身を置く

これも大事ですね!趣味でやるには相当な熱意と、根気がいると思います。

学生なら成果物を作ったうえで、長期インターンに応募したり、

クラウドソーシングで受託案件をとったりしたほうが絶対伸びます。

僕も研究で必要なPythonが一番書けるようになりましたw

 

 

勉強してきたおススメのサービス・本

 

React

Reactはバージョンによる変化が激しいので、

古い書籍・サービスには注意が必要です!

 

Udemyで体系的に学べるといいですね。

Reactは大型設計を書くために作成されているので記法のほかに、

ディレクトリ構造とかも学べるといいのかなぁと思います。

www.udemy.com

 

 

HTML/CSS

prog-8.com

みんな大好きProgateで間違いないと思います。

 

終わったら、AdobeXDの使い方学んで、

サクッとポートフォリオでも作っちゃいましょう!

helpx.adobe.com

 

人のサイトを模写するところから始めると勉強になりますよ!

 

Python

 

・Aidemy

aidemy.net

 

ステマではないです(笑)

まずは、AidemyでPython基礎を勉強するといいと思います!

最初の方の講座は無料だし、Vtuberが教えてくれるらしいですよ!

 

そのあとは書籍での勉強がいいかなと

Pythonはできることが色々あるし、それによって学ぶことが全然違うので

見合った本を買えばいいと思います!

いかにお勧めのサイト・本を載せておきます

(詳しくはツイッターか、コメントで聞いてください)

 

業務の自動化なら

www.oreilly.co.jp

 

データの自動収集(スクレイピング

gihyo.jp

 

機械学習

book.impress.co.jp

↑※緑のが新しいので注意です!

 

ディープラーニング

www.oreilly.co.jp

 

データ解析&機械学習(実践)

Kaggle: Your Home for Data Science

 

 

 

おわり

以上です!

6ヶ月で、あれこれ触りすぎた感が半端ないです(笑)

 

これからの半年は機械学習・データサイエンスに注力して実力をつけていきたいです

機械学習系をやっている人の平均戦闘力が高すぎて泣きそうですががんばっていきます(白目)

 

 

 

 

使える!Pythonライブラリのチートシート一覧

こんばんは!ひぐです。

 

 

f:id:zerebom:20180918224856p:plain

突然ですが!Pythonの魅力として充実したライブラリが挙げられますよね!

が!一つ一つ覚えることがいっぱいでなかなか使いこなせない。。。

 

ということで、今日はPythonのライブラリのチートシートを紹介したいと思います!

 

トイレのドアにでっかく貼るなり、枕の下に敷くなりして暗記しましょう('ω') 

*1チートシートとは

 

 

 

 

 

 ①Numpy

Numpyはベクトル、行列の高速計算用ライブラリです。

 

DataCamp社という海外のデータサイエンティストを育てるオンラインスクール?

が提供してくださっております(感謝)

英語しか見つけられなかったですが、いつか英訳したいと思います!

 

 

②Pandas

Pandasは行列を扱うライブラリです。

csvに出力したり、列ごとに処理をかけたりとExcelのマクロのようなことが出来る超便利なライブラリです!

 

こちらは@s_katagiriさんという方が、日本語に翻訳して下さっています!

しかもGithubからpdf・pptx形式でダウンロード出来ます

感謝。。。涙

 

 

qiita.com

 

github.com

 

 ③scikit-learn

scikit-learn(通称sklearn)は機械学習系のライブラリです!

 

こちらも、DataCamp社が提供しております!

www.datacamp.com

 

以下のURLからPDF形式でダウンロードできます

https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Scikit_Learn_Cheat_Sheet_Python.pdf

 

 

おわり

この3つ、特に最初の2つのライブラリは、

Pythonで頻出なのでぜひとも覚えたいですね!

 

他にも良いチートシートがあったら教えていただけたらと思います!

 

自分も作れるように精進したいです…!

*1:いまさらですがチートシートとは、覚えるべきことを見やすくまとめた画像の事です

PythonでAI画像認識アプリを作りました!【Day57】

しばらく更新の間隔があいてしまいました💦

 

今日はPythonでAI画像認識アプリを作ったので、

その紹介をしたいと思います!

 

今回の記事はAIの中身について詳しく言及するというより、

アプリの作り方を一から紹介するので、

Progateがひとまず終わった方、Rails等他の言語をやってる方もぜひ見てください!

 

こちらからクリック↓

ShikiSya

f:id:zerebom:20180916155031p:plain

 

 

 

どういうアプリか

Pythonを用いてAIの一種である、深層学習によって写真の四季を判定します

 

 

 

どういう知識があれば作れるのか

このアプリを作るには大まかに分けて3つの技術が必要となります。

箇条書きで必要な言語を書きました。

 

  • AIの仕組みを理解し、コードに落とし込む技術  
      • Keras(Tensorflowを簡単に書くためのラッパー)
      • Tensorflow(AIを作る)
  • アプリの見た目を作る技術
    • HTML(見た目を描画する)
    • CSS(HTMLを装飾する)
    • Chart.js(アニメ付きグラフを表示する)
    • Bootstrap(HTML・CSSを書きやすくする)
    • Adobe XD(見た目をスケッチするツール)
  • Pythonの結果を見た目に反映させる技術
    • Flask(PythonのデータをHTMLに渡す)

 

 

 

どういう手順で作ったか。

  1. ざっくりとイメージをする
  2. Pythonで中身を書いていく
  3. 見た目をAdobe XDで書いていく
  4. HTML&CSSでコーディングしていく
  5. デプロイする

 

こんな感じです。詳しく見ていきましょう!

 

①ザックリ考える

画像を判別するアプリを作る上で何が面白いか考えました!

人間でも判別しにくいものを判別出来たら面白いな!と思い、

四季という抽象的なテーマにしました。

 

そしてそのために必要な工程を考え、中身を実装していきました。

 

 

Pythonで中身を書いていく

 

以下のような手順で進めていきました。

 

  1. ニューラルネットワーク転移学習するためにKerasでモデルを組む
  2. 学習用データとして、Flickr APIから大量の画像をDLする
  3. 学習させ、その結果をHTMLにFlaskで渡す

 

この時参考にさせていただいたサイトはこちら↓

 

ykubot.com

 

aidiary.hatenablog.com

 

③見た目をAdobe XDで作っていく

Pythonで中身を書くことが出来たので、次はコーディングの目安になるように

Adobe XDで見た目を作っていきます。

 

Adobe XDは無料で使えるプロトタイプ作成ツールです。

公式チュートリアルもしっかりしていて、

1日触ってれば使えるようになるぐらい簡単です!おススメ!↓

 

helpx.adobe.com

 

そしてこんな風にプロトタイプを作成しました!

f:id:zerebom:20180916163337p:plain

 

デザインするうえで気を付けたことは、

  • 高級感を出すために、白黒・セリフ付きフォントを基調にする
  • 四季というテーマがわかりやすいように背景にでっかく写真を貼る。

 

です!

 

WEBデザインの基本は本を読んで、勉強しました👀

この本めっちゃおすすめです

SBクリエイティブ:いちばんよくわかるWebデザインの基本きちんと入門

 

あとは他の方が作ったWEBアプリとかをザーッとみて、

自分のイメージに合うものを選んで参考にさせていただきました。

 

ここで探すといいと思います!↓

www.eggineer.com

 

④HTML&CSSでコーディングしていく

 

実際にコーディングしていきます。

Adobe XDでプロトタイプを丁寧に作っていたので、それに沿って行くだけです!

ただ、僕の場合Twitterからの流入が殆どだと思ったので、

スマホでも見やすくなるように気を付けました。

 

 

Bootstrapも使ったのですが、あんまり仕組みを理解できておらず、

Flexboxと混ざってあんまり真価を発揮できなかったので次回は気を付けたいです…

 

また、結果画面のグラフではChart.jsを使いました。

JSは殆ど触ったことがないのですが

書き方が完全に独立している上、日本語のドキュメントがしっかりあったので、

楽々導入できました!

 

www.webprofessional.jp

 

⑤デプロイする

あとはデプロイするだけ!だったのですが、ここで死ぬほど詰まりました…

 

 

↑限界になっている僕

 

WEB系の方にとっては常識らしいのですが、

デプロイする場合は、最初にデプロイして徐々にpushするといいそうです。

そうすると、どこでエラーが起こったのかわかりやすいので…

ここの知見はのちほどQiitaで纏めるかもしれないです。

 

 

 

参考にしたサイト:

qiita.com

 

AI部分の大雑把な解説

 

画像の引用元:

news.mynavi.jp

AIと言われても中身何しているか全然わからないですよね!

ここでは簡単に解説します。

 

今回はニューラルネットワークの転移学習という技術を使っています。

 

ニューラルネットワークとは、

人間の神経細胞を数学的にモデル化した特徴分類器です。

 

ディープラーニング(=深層学習)はそのニューラルネットワークを何層にもして高性能にしたものと言えます。

 f:id:zerebom:20180916172427j:plain

 

 

 

入力画像が与えられてそれに対して、今まで学習した画像データと参照して、

この画像はこのカテゴリだ!と判定しているわけです。(死ぬほどざっくりした解説)

 

そして転移学習とは学習済みのモデルの最後の部分だけ、入れ替えたものです。

これにより、少量の画像データでも学習を行い、分類器として力を発揮できるのです

f:id:zerebom:20180916172429j:plain

 

と、まあめちゃくそざっくりとした解説ですね(笑)

詳しく知りたい人はAidemyの教材(無料)で学ぶといいかもしれないです!

aidemy.net

 

おわりに

以上です!アプリを作ると

  • 成果物として形に残る
  • 各技術とのつながりを理解できる
  • 周辺知識も身につく
  • 楽しい!!

いいことばかりです!ぜひみなさんも基礎が終わったらアプリを作ってみてください!

 

 

めちゃくちゃざっくり書いたので、ここ詳しく聞きたい!

って言うのがあったら是非コメントやTwitter(@zerebom_3)で連絡ください!

 

では~

 

 

 

 

google-site-verification: google1c6f931fc8723fac.html