ためすう
Rails5 でコントローラのメソッドをヘルパーにする
2019-05-17やったこと
Rails5 でコントローラに定義されているメソッドを、ヘルパーとして定義します。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
app/controllers/tasks_controller.rb
class TasksController < ApplicationController
helper_method :hoge
def new
end
private
def hoge
logger.debug(request.method)
end
end
コントローラで定義したメソッドをヘルパーとしてビューで取り扱えます。
app/views/tasks/new.html.erb
<% hoge %>
参考
Rails5 の delegate を使ってみる
2019-05-17やったこと
Rails5 で delegate を使ってみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
Active Support で用意されている delegate を使ってみます。
以下は動作を確認するためだけのコードです。
app/models/task.rb
class A
def hoge
'name A'
end
end
class Task < ApplicationRecord
@@b = A.new
delegate :hoge, to: :@@b
end
app/controllers/tasks_controller.rb
class TasksController < ApplicationController
def index
@task = Task.new
logger.debug(@task.hoge)
end
end
参考
はじめに
Coursera の 「How to Win a Data Science Competition」 のメモです。
英語字幕しかなかったので、翻訳の意味が分からないところがあるかもしれません。
Introduction & Recap
学習目標
- Describe competition mechanics
- Compare real life applications and competitions
- Summarize reasons to participate in data science competitions
- Describe main types of ML algorithms
- Describe typical hardware and software requirements
- Analyze decision boundries of different classifiers
- Use standard ML libraries
Competition mechanics
- Data
- Model
- Submission
- Evaluation
- Leaderboard
Data
- データは提供されているもの
データのフォーマットの種類
- SSV
- テキスト
- 写真付きのアーカイブ
- データベースのダンプ
- 無効化されたコード
Model
- コンペの時に作るもの
- データから答えに変換するもの(ある特定のアルゴリズムを指すのではない)
モデルの特性
- 最良の予測をする
- 再現性がある
Submit
- 予測結果を提出する
Evaluation
- モデルの質は正解率によって決められる
- コンベではどの評価関数を使うか決められている
Leaderboard
- スコア自体よりも他の参加者と比べて相対的な性能を見る
- データ分析 -> モデル改良 -> 提出 -> Leaderboard を見る を何度も繰り返す
- 提出物を評価する時、Public、Private の2つのテストデータがある
- Public はコンペ中の評価に使われるもの
- Private はコンペ終了時に最終評価するもの(非公開)
コンペに参加する理由
- 学習の機会
- 視野を広げる
- 賞金を獲得できるかもしれない…
Kaggle Overview
- Kaggle の Overview > Evaluation には、このコンペの評価関数が記載されている
- コンペの Rules を注意深くみること、参加人数、提出制限などなど、大事なことが書いてある
カーネルの目的
- アイデアを素早くチェックする
- 他の参加者にコードを共有する
Real World Application vs Competitions
実世界の機械学習
- ビジネスの観点から問題を理解する
- 問題の定式化
- データを集める
- データの前処理を行う
- モデルを構築する
- モデルを評価する方法
- モデルをデプロイする方法
コンペ
- データの前処理を行う
- モデルを構築する
コンペは実世界の機械学習と比べて、単純化されている。
データに関する洞察は、アルゴリズムよりも大切
参考
Ruby で組み込みクラスを拡張する
2019-05-15やったこと
Ruby で組み込みクラスを拡張する方法を調べました。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
test.rb
class Array
def hogehoge
'hogehoge'
end
end
p [1, 2].hogehoge
p [1, 2].empty?
出力結果
$ ruby test.rb
"hogehoge"
false
これで拡張出来ましたが、安易に使わない方が良さそうです。
Ruby で中央値を求める
2019-05-15やったこと
Ruby で中央値を求める方法を調べました。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
今回は、facets という汎用メソッドが拡張されたものがあるので、それを使ってみます。
facets のインストール
$ gem install facets
インストールした facets のバージョン確認
$ gem list | grep facet
facets (3.1.0)
Math.median
test.rb
require 'facets/math'
a = [6, 3, 4, 9, 1, 2]
p Math.median(a)
出力結果
$ ruby test.rb
3.5
Array.median
test.rb
require 'facets/array/median'
b = [6, 3, 4, 9, 1, 2]
p b.median
出力結果
$ ruby test.rb
4
まとめ
配列が偶数個あった場合の挙動が変わります。 Math.median では平均値を出力してくれました。
参考
はじめに
Coursera の 「How to Win a Data Science Competition」 のメモです。
英語字幕しかなかったので、翻訳の意味が分からないところがあるかもしれません。
Introduction & Recap
学習目標
- Describe competition mechanics
- Compare real life applications and competitions
- Summarize reasons to participate in data science competitions
- Describe main types of ML algorithms
- Describe typical hardware and software requirements
- Analyze decision boundries of different classifiers
- Use standard ML libraries
Welcome to “How to win a data science competition”
知っておくべきこと
- 前処理
- 特徴の抽出
- 正しくバリデーションを設定する
- 与えられた測定基準を最適化する
- 潜在的なデータ漏洩の原因について
- モデルでパラメータを調整すること
- 特徴量の生成方法
- モデルをアンサンブルする方法
データ漏洩ってなに
Leakage とは、モデルを作るときに、本来知らないはずの情報(変数やデータ)を不当に使ってしまうこと
モデルの選択が与える影響
We will see, that the choice of the machine learning model impacts both preprocessing we apply to the features and our approach to generation of new ones.
モデルの選択によって、前処理、新しい特徴量の生成のアプローチが変わってくるようです。
このコースの目標
データサイエンスのコンペに出る知識を身に付けること
1週目
- コンペの仕組み (実務との違い)
- 主要な機械学習のモデル
- データ分析のためのPythonライブラリ
- 特徴の種類、前処理、新しい特徴の作成 (テキスト、画像から特徴を抽出)
2週目
- コンペの最初にやること(データフレーム、モデル)
- データ分析のトピック、EDA (探索的データ解析)
- データの分析方法(匿名化された特徴、データをきれいにする)
- 検証(データ漏洩、Leaderboard の問題)
3週目
- 様々な回帰と分類の測定基準
- mean-encodings
4週目
- 他の高度な特徴
- 統計と距離に基づく特徴
- t-SNE (高次元データの次元を圧縮するアルゴリズム)
- パラメータ調整
- モデルのアンサンブル
参考
Ruby でファイルを操作する
2019-05-14やったこと
Ruby でファイルの書き込み、読み込み、削除をやってみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
ファイルの書き込み
File.open('test.md', 'w') do |file|
file.puts 'hogehoge'
end
ファイルの読み込み
File.open('test.md', 'r') do |file|
file = file.read
p file
end
ファイルの削除
File.delete('test.md')
ファイルの存在チェック
if File.exist?('test.md')
p 'test.md is exist'
end
参考
Rails5 でコールバックを使う
2019-05-14やったこと
Rails5 で Active Record のコールバックを使ってみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
コールバックについて
コールバックとは、オブジェクトのライフサイクル期間における特定の瞬間に呼び出されるメソッドのことです。コールバックを利用することで、Active Recordオブジェクトが作成/保存/更新/削除/検証/データベースからの読み込み、などのイベント発生時に常に実行されるコードを書くことができます。
動作確認
今回は、 after_initialize を使ってみます。
app/controllers/tasks_controller.rb
class TasksController < ApplicationController
def index
@task = Task.new
end
end
app/models/task.rb
class Task < ApplicationRecord
after_initialize :hogehoge
def hogehoge
logger.debug('called hogehoge with after_initialize')
end
end
after_initialize を使えば、initialize をオーバーライドしなくても良くなります。
after_initializeコールバックは、Active Recordオブジェクトが1つインスタンス化されるたびに呼び出されます。インスタンス化は、直接newを実行する他にデータベースからレコードが読み込まれるときにも行われます。これを利用すれば、Active Recordのinitializeメソッドを直接オーバーライドせずに済みます。
参考
第1章 Python ではじめる機械学習 (実践機械学習システム)
2019-05-12メモ
機械学習の目的は、データの裏側に潜むパターンや関係性を学ぶことで、データについてより深い洞察を得ることです。
作業の流れ
- データを読み込み、データを整形する
- 入力データの調査および解釈を行う
- 学習アルゴリズムにどのような形でデータを入力するのが相応しいか分析を行う
- 正しいモデルと学習アルゴリズムを選択する
- 結果に対して正確な評価を行う
改良したデータに対して単純なアルゴリズムを用いるほうが、生データに対して洗練されたアルゴリズムを用いるより、結果が良いことがほとんど です。
データを改良する行為を「特徴エンジニアリング (feature engineering)」と呼ばれます。
機械学習の初心者にとって最も間違いを起こしやすい場所は、性能を評価する段階です。
たとえば、まず全データの数%だけを保持 (ホールドアウト) しておき、残りのデータを使って学習を行うとします。そして保持したデータを用い て誤差を計算するのです。
まとめ
大切なこと
- 機械学習の作業において最も大切なことは、データを理解しデータを扱いやすい形に整形すること。
- 正しい評価を行うこと。正しい評価を行うにあたって、訓練データとテストデータを区別する。
参考
- 実践機械学習システム
Ruby で inject を使う
2019-05-12やったこと
Ruby で inject メソッドについて調べます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
inject は
リストのたたみこみ演算を行います。
$ rails c
irb(main):001:0> [1, 3, 5].inject { |result, item| result + item }
=> 9
irb(main):002:0> [1, 3, 5].inject { |result, item| result + item**2 }
=> 35
irb(main):003:0> [1, 3, 5].inject(10) { |result, item| result + item**2 }
=> 45
irb(main):004:0> [1, 3, 5].inject(:+)
=> 9
ちなみに、同じ処理をするために each を使っても出来ます。