深層学習とその他

機械学習したいマン

アドベントカレンダーを終えて

アドベントカレンダー25日目です。

adventar.org

 

アドベントカレンダーを終えて

今年もなんとかアドベントカレンダーを完走することができました。
一人でアドベントカレンダーを書くことには、メリットとデメリットがあると思います。

メリットとしては、毎日ブログを書くことで、アウトプットの習慣を作ることができることや、ブログのために勉強をするという動機を作れるということだと思います。

デメリットとしては、毎日書かなくてはいけないということで、内容が薄めになりやすいところ、複数人で書かないのであまり楽しみがないということがあります。

今年は昨年に比べてとても忙しかったので、駆け込みでブログを書くような日々が続きました。このような状況なのであまりいい記事もかけていません。
しかしながら、アドベントカレンダーをやるのとやらないのだと、やってよかったと思います。

そして、来年は今年より忙しいことが見込めるので、一人アドベントカレンダーをやるかは不明です。どちらかといえば何かのアドベントカレンダーに参加したいという気持ちが今はあります。

今年もあと一週間ですが、来年も頑張っていきたいと思います。

scikit-learnのNaive Bayes使ってみた

アドベントカレンダー24日目です。
今日はscikit-learnでNaive Bayesを使ってみたいと思います。
adventar.org

Naive Bayesについて

今回はGaussian Naive Bayesを使います。

GaussianNB implements the Gaussian Naive Bayes algorithm for classification. The likelihood of the features is assumed to be Gaussian

 \displaystyle 
P \left( x _ { i } | y \right) = \frac { 1 } { \sqrt { 2 \pi \sigma _ { y } ^ { 2 } } } \exp \left( - \frac { \left( x _ { i } - \mu _ { y } \right) ^ { 2 } } { 2 \sigma _ { y } ^ { 2 } } \right)
The parameters \sigma _ { y } and \mu _ { y } are estimated using maximum likelihood.

https://scikit-learn.org/stable/modules/naive_bayes.html#gaussian-naive-bayes

詳しくはよくわかりませんが、使うだけならSVMと同じように簡単です。

学習と分類

とりあえず必要なものをインポートします。
ちょっと種類が多いのは、混同行列を出したりしたからです。

import itertools
from collections import Counter
import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix



今回はデータセットにdigitを使います。
digits.dataでデータが、digits.targetでラベルが取得できます。

digits = datasets.load_digits()
data = digits.data
target = digits.target



データを学習用とテスト用に分けて学習を始めます。

(X_train, X_test, y_train, y_test) = train_test_split(data, target)
gnb = GaussianNB()
clf = gnb.fit(X_train, y_train)



あとは分類してみましょう。

y_pred = clf.predict(X_test)
np.mean(y_test == y_pred)
Out[19]: 0.8577777777777778



使用したコード及び、classification_reportとconfusion matrixはこちらに載せておきます。


まとめ

今回はNaive Bayesを使ってみましたが、非常にお手軽でした。
scikit-learnにはほかのNaive Bayesもあるので、試してみてください。

通学時間で勉強する

アドベントカレンダー23日目です。
今日は通学時間での勉強について書いていきたいと思います。

adventar.org

通学時間の勉強

  1. 英語の勉強
    英語の勉強は通学時間でとても手軽にできますね。
    一番簡単なのは、単語学習アプリなんかをやることです。
    個人的に好きな単語学習アプリは「mikan」か「スタディサプリ英単語」です。

    eitangosapuri.jp
    mikanはシンプルに使いやすく、TOEIC対策や、大学受験対策もできます。
    スタディサプリ英単語は、単語力で競ったり、苦手な単語を学びなおすときに使いやすいと思いました。

    単語の勉強以外では、スタディサプリENGLISHが使いやすいと思いました。
    文法自体の勉強や、リスニングの勉強もできますが、月3000円とあまり安くないので少し悩みどころです。

    eigosapuri.jp

  2. 動向を学ぶ
    通学時間はなんとなく記事を読んだりするのが好きな人は、自分の専門の動向を学ぶのがいいかも知れません。個人的には動向を学ぶ際には、Twitterはてなブックマークを使っています。
    Twitterでは、最新の動向を発信する人をフォローしていて、その人のRTする記事を読んだりしています。
    はてなブックマークは「機械学習」など好きな分野について検索するか、テクノロジー分野などで気に入った記事を読むなどの運用が楽かなと思います。

  3. アウトプットする
    ブログを書いたりするのが好きな人はアウトプットをしたりするのがいいかも知れません。今現在自分も文章力をアップさせるという意味合いを込めてアウトプットしていますが、何かしら学んだことをメモにしておくと、誰かの助けになったり、後で自分自身が忘れたときに確認することもできます。
    また、精力的にアウトプットを行っていることは、就活や転職などにおいてプラスになると思います。

まとめ

ソシャゲをしたり、動画を見たりするのもいいですが、家に帰って自由時間を削るのが嫌な人は通学時間に勉強するのもいいかなと思いました。

kaggle-apiを使ってdownload, submitを行う

アドベントカレンダー22日目です。
今日はkaggle-apiの使い方を書いていきたいと思います。 adventar.org

リモートで出力されたcsvをいちいちダウンロードしてsubmitするのは面倒ですよね。 コンペのファイルをダウンロードするのも面倒ですね。

そういうときはkaggle-apiが便利です。

** インストール

インストールもお手軽にpipでできます。

pip install kaggle

セットアップ

使用前にtokenを設定する必要があります。

  1. kaggleのサイトを開き、アカウント設定を開きます。http://kaggle.com/f:id:looseleaf0727:20180628144134p:plain

  2. Create API Tokenからjsonを取得します。f:id:looseleaf0727:20180628144842p:plain

  3. ダウンロードしたjsonを決まった位置に配置します。 ~/.kaggle/kaggle.json

  4. 権限を設定します。
    chmod 600 ~/.kaggle/kaggle.json

使い方

データをダウンロードする

quoraコンペの例ではこのようになります。
`kaggle competitions download -c quora-insincere-questions-classification
これを打ち込むだけで、デフォルトの位置にダウンロードされます。 f:id:looseleaf0727:20181222102145j:plain

submitする

提出するファイルを-fの後に指定し、提出する際のメッセージを-m以降で設定できます。 kaggle competitions submit -c ga-customer-revenue-prediction -f submission.csv -m "Message"

f:id:looseleaf0727:20181222102201j:plain

まとめ

毎回submitする際にCSVをダウンロードしたりしなくてすむので、ぜひ使ってみてください。

画像を圧縮するサービス「Squoosh」を使う

アドベントカレンダー21日目です。
今日は画像を圧縮するサービスSquooshを使ってみたいと思います。

adventar.org

Squooshとは

お手軽に、ブラウザのみで、画像を圧縮してくれるサービスです。
このブログでも、一眼レフの紹介記事を書いた時には使用しています。

squoosh.app

使い方

トップページはこんな感じです。
まず、画像をドラッグ&ドロップするか、画像選択します。

f:id:looseleaf0727:20181220124700j:plain

 

 

画像選択した後の画面はこんなです。

f:id:looseleaf0727:20181220125014j:plain

 

特に設定をせずに圧縮するだけなら、右下のボタンを押すと圧縮できます。
元の容量が、左下に出ている17MBに対し、圧縮した後のサイズは右下に出ている通りの3.19MBです。81%の容量削減に成功しています。

 

マウスホイールを動かすことで、画像の拡大縮小が可能です。
そして、真ん中のバーを動かすことで、圧縮前と圧縮後の比較ができます。
画像を確認しながら圧縮できるのも便利なところですね。

 


わずかにノイズが増えているのが見えると思います。
そこまで大きな変化はなしに容量が81%も削減できているのはすごいと思います。

f:id:looseleaf0727:20181220125258j:plain

 

 

リサイズ機能や、色の減衰機能もあります。
Resizeにチェックをつけると、サイズやアスペクト比の維持の設定に加えて、リサイズ方式まで指定できます。
colorsの数値を下げるとわずかに容量を圧縮できます。

f:id:looseleaf0727:20181220125557j:plain

 

 

Show advanced settingsを押すことで、より詳細な設定ができます。
ほとんどの機能は使わないかと思いますが、個人的にはSmoothingは使うかもしれないと思います。
以下の画像はSmoothingを最大にしたものですが、ノイズが減っているかわりにやや塗りつぶしたような感じが見受けられます。これも容量の削減につながるのでお好みでどうぞ。

f:id:looseleaf0727:20181220125935j:plain

 

 

一番誰もが調整する部分として考えられるのは、Qualityです。
これを下げることで容量を大きく下げることができますが、あまり下げるとノイズが大きく乗ってしまいます。
例えば、今回の画像ではQualityを23まで下げることで、リサイズなしに容量は1MBを切ることができました。

f:id:looseleaf0727:20181220130409j:plain

 

 

まとめ

今回は画像を圧縮するサービスを使ってみました。
画像をアップロードするときにサイズ制限がある場合や、大きさに制限があるときにぜひ使ってみてください。

Googleスプレッドシートでテキストを分割する

アドベントカレンダー20日目です。
今日は、Googleスプレッドシートで列ごとにテキストを分割する方法を書いていきたいと思います。

adventar.org

テキストを分割する

昨日作成した、

scikit-learnのclassification_reportでlabelを設定する - 深層学習とその他

classification_reportをgoogleスプレッドシートに張り付けて、表を作るとします。その時に、テキストが同じセルにまとまってしまうということが起こりました。

f:id:looseleaf0727:20181220121503j:plain

 

テキストを分割するには、データからテキストを列に分割するを選択します。

f:id:looseleaf0727:20181220121727j:plain

 

すると何を基準に区切るかを設定する画面が出ます。
今回の場合はスペースですね。

f:id:looseleaf0727:20181220121810j:plain

 

こんな感じになりました。
何故か幅が大きく空いてますが、正しく分割できましたね。

f:id:looseleaf0727:20181220122036j:plain

 

 

また、複数行を同時に分割することもできます。

f:id:looseleaf0727:20181220122128j:plain

 

 

分割した結果はこんな感じです。
きれいに分割できましたね。

f:id:looseleaf0727:20181220122152j:plain

 

 

まとめ

Googleスプレッドシートにデータを貼り付ける際の助けになると思います。

scikit-learnのclassification_reportでlabelを設定する

アドベントカレンダー19日目です。
今日はclassification_reportでラベルを設定する方法を書いていきたいと思います。
adventar.org

ラベルの設定の仕方

scikit-learnのドキュメントはこちらです。
sklearn.metrics.classification_report — scikit-learn 0.20.2 documentation


classification_reportにラベルと予測結果を渡すことで、表を出力してくれます。
その際にラベルを設定しようとして少してこずったので書いていきます。


classification_reportの引数は以下の通りです。

classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html#sklearn.metrics.classification_report



これを見たときに、labelsにラベルを渡せばいいのかと思ったのですが、エラーを吐いてだめでした。
実際には、target_namesに渡す必要があったみたいです。

print(classification_report(label, pred, target_names=["a", "b", "c", "d", "e", "f", "g", "h", "i"]))
             precision    recall  f1-score   support

          a       0.16      0.63      0.26       104
          b       0.71      0.66      0.69       671
          c       0.02      0.48      0.04        29
          d       0.96      0.72      0.82      7205
          e       0.13      0.61      0.21       102
          f       0.49      0.55      0.52       796
          g       0.56      0.84      0.67       277
          h       0.02      0.57      0.04         7
          i       0.09      0.60      0.15        10

avg / total       0.87      0.70      0.77      9201

まとめ

これでclassification_reportをより見やすくすることができますね。
日本語を使用すると表がずれやすいので気を付けてください。