Screaming Loud

研究・プログラミングなど気づいたことをメモをしています。読書記録はこちらに記載しています。https://bookmeter.com/users/75944

早速githubのPRテンプレート機能を使ってみた。

GithubのPRテンプレート機能が出たということで、試しに使ってみた。

何が追加されたか?

GithubのIssueとPRのテンプレートができた。

PRはデフォルトでこんな感じで表示される
f:id:yuutookun:20160218094334p:plain

まあ普通のテンプレートですね。

どうやって使うのか?

プロジェクトのルートディレクトリか.githubフォルダに以下を格納することでできます。

.github
  └ PULL_REQUEST_TEMPLATE.md # PRのテンプレート
 └ ISSUE_TEMPLATE.md # Issueのテンプレート
 └ CONTRIBUTING.md # PR時の注意書き

簡単ですね。

これを利用して、さらにGithubライフを充実させていきましょう。


参考リポジトリはこちら
GitHub - moc-yuto/regression: calculate regression by breeze

Hadoop Spark Conference Japan 2016 に参加したときのメモ

Hadoop Spark Conference Japan 2016に参加したので、その聞いた内容をまとめました。

Spark MLlib Now and Beyond

Spark自体はコントリビュータが多いプロダクト

sparkでは、2つのの機械学習ライブラリがある。

  • spark.mllib: RDDというデータフレームを利用
  • spark.ml: DataFrame, PipelineAPIを利用

spark.mlの利用を推奨
scikit-learnに影響

【データ構造】
  • RDD
  • DataFrameAPI

RDD
numpy.arrayのような配列の形式

【DataFrameAPI】
DataFrameAPI:RDBのように直感的にデータにアクセスできるAPI
pandasに影響を受けて作られている

サポートしているデータソースも豊富
jdbc, mysql, posqresql, hive

ビルトイン関数も豊富
Catalystによる処理最適化によって、生RDDよりDataFrameのほうが速い

【PipelineAPI】

処理をつなげられ、再利用もしやすい

tokenizer:単語のトークン化
hashingTF:単語のベクトル化
logisticRegression:ロジスティック回帰

上の3つの操作をpipelineでまとめることができる

pipelineを再利用することで簡単に使い回すことができる
例えば、入力をtrainDataとtestDataにしたり。

pipelineを使うと
クロスバリデーションも簡単にできる

そしてその作ったpipelineをs3やhdfsに永続化することもできる

pythonで分析して、scalaで読み込む
なんてこともできる

【Mllib2.0】
・GLMの改善
・永続化未対応ライブラリがまだある。それの改善。

SparkによるGISデータを題材として時系列データ

GISデータとは、船の航行データ(緯度、輝度、速度とか)
GISデータ、センサーデータ:多変量時系列データ
データの収集・蓄積はできているが、分析がまだまだ。

【要件】
性能、柔軟性、スケーラビリティが必要

【sparkを用いた時系列データ処理】

時間依存の情報
・時刻
・緯度、経度
時間非依存の情報
・移動体ID

やりたいこと
・移動体ごとにデータをソート
・時刻や座標の差分を計算
・numpyの関数をそのまま使えること

時系列データの評価ポイント

  1. レコード長の違い:長いほうが遅い(普通)
  2. レコードに偏りをもたせるか:ほぼ変わらない
  3. RDDかDataFrameか:DataFrameのほうが速い

RDD [“ships”, “0.0.0"]
DataFrame は表形式
ただ、DataFrameはメモリを使うので、そこら辺のチューニングが必要

flinkとかも出てきている。
pythonでできるところは、pythonで。

行、列指向の片方だけで閉じない

なんでpythonから移行したのか?→データ量が増えてきて、今後に対応できないと感じたから
sparkは1台で実行したのか?→並列で実行させている

sparkUIから確認することで、チューニングを行った。

時系列データにSparkを使うのは現実としてあり。

まだまだ、公式には足りない機能が多いので、spark packagesなどのパッケージ関連を検索してみるのも大事。

Hive on Sparkを活用した高速データ分析

CDHをいれていると、3clickでHive on Sparkが導入可能に。

www.slideshare.net

最短でsbtのコマンドを追加する方法

sbtと打つとREPLが起動し、runしたりtestが走らせられたり色んな挙動をさせられる。

しかし、自分でコマンドを作ろうと調べてみると、案外出てこない。

ということで最短でコマンド作成を紹介します。

最短でHelloという文字を出力させる

Helloという文字列を出力させます。

build.sbtに以下を記載します。

これで以下出力が出せます。

$sbt
>hello
Hello
[success] Total time: 0 s

別ファイルに定義したメソッドを呼ぶ

こちらの方がニーズがあるでしょう。

project/Hello.scalaを作ります。

先ほどと同じようにbuild.sbtに以下を記載します。

このように出力できます。

$sbt
>hello
Hello
[success] Total time: 0 s

sbt REPL上で引数を受け取るタスク

こうやると、引数を受け取れます。

$ sbt
> hello
List()
[success] Total time: 0 s, completed 2016/02/05 19:47:46
> hello a
List(a)
[success] Total time: 0 s, completed 2016/02/05 19:47:49
>

scalaNLPに含まれているライブラリを調べてみる

Scalaにもnumpy, scipyのような数値計算ライブラリがあります。

ScalaNLPというレポジトリで登録されています。
github.com

では、どんなものがあるか調べてみます。

breeze

Breezeは、数値計算ライブラリです。
numpyのようなもので、行列計算などを操作するためのライブラリがメインです。

他のライブラリの基盤ともなっています。

  1. breeze.linalg: breezeで扱う行列など型を定義しています。
  2. breeze.io: CSVからの読み込みなどを行うIOの関数を定義しています。
  3. breeze.numerics: absやsin, cosなど基本的な関数を定義しています。
  4. breeze.signal: デジタル信号の関数を定義しています。
  5. breeze.stats: 乱数生成のライブラリです。

例えば、標準正規分布に基づく乱数であれば、以下の様に出力することができます。

import breeze.stats.distributions._
val mu = 0
val sigma = 1
println(Gaussian(mu, sigma).draw)

nak

Nakは、機械学習のためのライブラリです。

k-meansとロジスティック回帰、SVMがオリジナルで実装されています。
またbreeze-learnからの移植で、ナイーブベイズニューラルネットもあります。

breeze-viz

グラフなどplotして可視化するライブラリです。
いわゆるmatplotlib的なものですね。

このライブラリは、breezeに戻したようです。
他にも以下の様なビジュアライゼーションライブラリもあります。
sameersingh/scalaplot · GitHub

また以下ライブラリは、ScalaNLPには含まれていませんが、wikiにて紹介されているものです。

Epic

Epic形態素解析器です。
PythonのNLTKのようなものです。
日本語はもちろん作られていないので、MeCabを使うのが無難でしょう。

Junto

parthatalukdar/junto · GitHub
Label Propagationのアルゴリズムが実装されています。

ただしこちらは最後のコミットが2014年の3月なので、全然メンテされていないですね。。

やはりRやPythonに比べると、ライブラリの充実度は圧倒的に低いですね。。
Scalaの場合は、Javaの資産をそのまま使えますが、kそれでも劣っているように感じます。