347

勉強のこと、酒のことを書いていく

完全SIer脱出マニュアル 購入

勉強します。

あと今流行の完全SIer脱出マニュアル、購入しました。

電車移動中に読んでまだ途中だけど、心強い味方ができた気分になるのでおすすめ。

shiganai-radio.booth.pm

 

読み終わったらウダウダしてないで転職活動するべきかな。

完全SIer脱出マニュアルより抜粋

  • その企業やSI業界の中でしか使えない技術だけしか身につかない状況に、焦りを感じた
  • 楽しくて仕方ない「仕事」というのが、この世の中には存在する

言葉が響きまくりです。

あと内容に影響されて、以下を土日に実施予定。

 

 

PCを開いて特徴変換について勉強し始めたところ

  • pandas の描画がうまくいかない
  • 暗い色を基本としたWebページ、背景にすると画面の輝度が勝手に変わって気になる

という事象によりまったく進みませんでした。

 

ちなみにSurfaceで輝度が勝手に変わるのは、以下を参照して修正。

先人の知恵はありがたい。

tenhana.blogspot.com

 

ただ上記のパターンと違って、ドライバをZIPでダウンロードしてもうまくいかず、

exeをダウンロード、インストールすることでグラフィックス設定ができるようになった。

さっそくVSCodeの配色テーマをMonokaiに変更、よさげです。

 

Abema developer conference 2018 参加報告

f:id:geva:20181014155630j:plain

タイトル通り、Abemaサービス開始から利用しているという点から興味を持ち、

Abema developer conference 2018に参加してきました。

スライドは後日見られるようになるらしいので、内容より感想がメイン。

 

業務に関連しているので知識を学びに参加、という意味合いは薄く、

Abemaの裏側でどんなエンジニアがどんな働き方や取り組みをしているのかを

見てきた、という面が強い。(勉強30%、業界見学60%、Abema楽しそうだな…10%)

 

AbemaTV Developer Conference 2018

HPから概要引用:

今年も「AbemaTV Developer Conference」の開催が決定しました!

今年のコンセプトは「PAST→FUTURE」。

過去・現在・未来の3つの時間軸でセッションを構成する予定で、開局から約2年半の実績をもとに、快適な視聴体験を届けるための取り組みや、大規模な同時接続に対するシステム開発・運用によって得られた技術的知見を公開します。

皆さま是非ご参加くださいませ。

主催 株式会社AbemaTV
開催日時 2018年10月13日(土)
参加費 無料
定員 300人
対象 エンジニア
会場 渋谷ストリームホール (東京都渋谷区渋谷3-21-3)

 

 

参加したセッションと感想

 AbemaTVのエンジニア組織論と今後の技術戦略

 組織開発において大切にしている要素として、個人に対する評価、成長機会や

 マネジメントとしてどのように組織成果を最大にするか、具体的な

 取り組みを見ることができた。

 

 特に個人に対する取り組みは自社と違い過ぎて羨ましいの一言に尽きる

 またAbemaのシステム構成概要も紹介され、細かな単語はその場で調べつつ、

 大まかな内容は理解することができた。やっぱクラウドを最大限利用している。

 

 72時間ホンネTVの負荷対策とその裏側

 総視聴者数が7,400万を超えた特番の裏側について紹介。

 問題点の発見と優先順位付け、それぞれの対策、対策が間に合わない点での

 個別対処(システムダウンに備えた見直し、関連部署との調整)を実施したとのこと。

 

 発表者の方の話し方やスライド構成が上手く、とても聞きやすい発表だった。

 内容としては「選択と集中の大切さ、最重要なもの以外の割り切り」

 という点はどの業界でも活かせる大切なことだよな、と実感。

 

 AbemaTVのアーキテクチャの変遷

 開発開始から仮開局、仮開局から本開局など時期を分けて技術面を紹介。

 正直細かい点は理解・勉強できなかったものの、大きなイベントごとに

 裏側ではこんな変化や改良を重ねていたのか、という

 ユーザーとしてだけでは見えない部分を知ることができて感動。

 

 AbemaTVの広告システムと、データサイエンスの広告事業への貢献

 広告システムの裏側でどんな苦労をしているのか、というお話。

 広告ごとに決められた視聴数を守るためにデータサイエンスが活用されていること、

 今自分が興味を持って勉強している機械学習が活用されていると知り

 勉強を継続するモチベーション向上につながった。

 (ただトークがやや速く、じっくり聞きたいなとも感じた)

 

 世界の動画技術動向を見据えた AbemaTV の向かう先

 動画技術エバンジェリストの方がどんな取り組みをしているのかという内容。

 世界中の動画関連イベントを攻め、解決案やヒントを得て持ち帰って

 また探しに行くという世界で行われるイベントをフル活用している事例だった。

 

 発表のボリュームに対し時間が不足しているためか、かなり駆け足で

 ついていくのに必死でした。

 ただキーワードの「足りない部分は世界に補ってもらおう」は

 どこの会社も、また自分も見習っていきたい取り組みだった。

 

 

全体を通しての感想

映像業界としてのこれまでの挑戦、今後の取り組みを見て

「あー 今の自分の経験ではイチから勉強し直しだけどAbemaで働いてみたいな」

と考える勉強会でした。

 

またグッズとしてステッカー、名刺入れ、お菓子、水を頂きました。

本当はAbema君の形をしたペットボトルも欲しかったけど、

あまり時間がなく買えず…残念

f:id:geva:20181014160700j:plain

特徴選択について

部屋の構造なのか、窓を開けていてもとても暑い

外は20度ぐらいなのに部屋が28度ってどうなってるんだ

 

ブログ(というより勉強メモ)と勉強、スクワットは継続しているけど

相変わらずブログっぽく書くことに慣れない

今週末の勉強会参加報告はそれっぽく書けるか

 

特徴選択
  • sklearnの脳の癌のサンプルデータで特徴選択を学ぶ
  • サンプルデータには30個の特徴が含まれており、ランダムなデータ・定数値など識別に有効ではない特徴が含まれているかもしれない
  • sklearn.feature_selection から SelectKBest、chi2 をimportして試す
  • SelectKBestは特徴の中からK個のよい特徴を選択するクラス
  • chi2は動画でも説明無し、調べてもいまいち要領を得ない… のでまずは手を動かす
  • qiita.com

  • SelectKBestのインスタンスを作成、fitで学習、transformで特徴を選択した新しい学習データを作成する
# selectkbestのオブジェクトを作成、カイ2乗基準を使用、20個取ってくる
skb = SelectKBest(chi2, k=20)
skb.fit(X_train, y_train)
# fitの時点ではまだ特徴は30個のまま、transformで20個取り出してくる
X_train_new = skb.transform(X_train)
  • 上記では20個の特徴を選択したが、20個が最も精度が出るとは限らないので特徴選択を1-31個まで変化させながら精度を確認する
  • 精度、標準偏差を確認するとkの数は特定の値で頭打ちする
  • f:id:geva:20181009215940p:plain

  • 今回の場合は最も精度が出るkの値は26、しかし30の場合(特徴選択をしない場合)でも精度は変わらない
  • 精度は変わらなくとも特徴量を減らすことで計算するための負荷が軽減するため有用と言える

テキストデータ、画像データと特徴量

3連休、世間の独身の方々はどう過ごしているのでしょうか

酒と読書以外に趣味を見つければ有意義になるのか

3連休とは無関係だけど、30日間スクワットチャレンジが続いている、今日は105回

 

Udemyで8分程度の動画を毎日1-2本見ながら勉強しているけど、

  • 動画を見て適宜止めつつコードを書いてみて、
  • 動かしてみて、
  • 内容を確認、
  • わからないことがあれば別途調べて
  • ブログにメモ

を繰り返していると動画1本あたり50分くらいかかる不思議

 

テキストデータの特徴抽出
  • http://www.gutenberg.org/files/11/11-0.txt から著作権の切れている、不思議の国のアリスのテキストデータをダウンロード、これを使う
  • テキストデータを特徴量に変換する
  • sklearn.feature_extraction.text というテキストデータ用のクラスを使用する
  • ダウンロードしたテキストを fit で学習、transform でベクトル化
  • CountVectorizer を使用することで、文書に含まれる全単語の出現回数に変換される
  • 文書に含まれる単語の出現回数は、その文書を表す特徴量となる、テキストデータの特徴量変換の方法の1つ

 

画像データの特徴抽出
  • sklearn.datasets に含まれる load_sample_image をimportして方法を学ぶ
  • Importエラーが出るので何かと思ったら画像処理ライブラリが入っていないようだった
  • pip install Pillow でインストールしたところ解消、サンプル画像が表示された
  • 427 × 600 のRGBで表現された画像
  • 特徴抽出のわかりやすい方法として、ヒストグラムを作成する
  • ヒストグラムは横軸が濃度、縦軸が画素数で表したグラフ
  • RGBそれぞれで10個の区間を持つヒストグラムを作成する 
histR = plt.hist(china[:,:,0].ravel(), bins=10)
histG = plt.hist(china[:,:,1].ravel(), bins=10)
histB = plt.hist(china[:,:,2].ravel(), bins=10)
import numpy as np
histRGBcat = np.hstack( (histR[0], histG[0], histB[0]) )
plt.bar(range(len(histRGBcat)), histRGBcat)

f:id:geva:20181007204827p:plain

  • これで30次元のベクトル化ができたが、実際にはRGBでベクトル化しても識別がうまくいかないのであまり使われない、らしい(動画で言ってた)

 

学んだこと
  • 画像について勉強してこなかったため、理解が追いつかない…
  • 後にやりたいことでは音声データを扱いたいので、同様の苦労が出てきそう
  • はてなブログでコードを載せるのにいい方法はないものか

データから識別へ、特徴量について

3連休予定無さすぎてもう

東京都内で良さそうな温泉探して行こうか考えるくらい予定が無い

 

データから識別までの流れ
  • 以下の流れを踏む
  • データ取得(画像、信号、センサ出力など)
  • 特徴量抽出(数値、特徴量ベクトルに変換)
  • 特徴選択
  • 特徴変換
  • 正規化
  • 識別

 

欠損値の扱い、データクリーニング
  • 欠損値、外れ値を含むCSVをデータとして使用、扱いを学ぶ
  • numpy の isnan を使用して欠損値を確認、除外
  • abs で絶対値を確認、特定の値から外れるものを除外
  • 除外を行うとデータセットの数が減ってしまうため、他の方法として、欠損値を埋めるという方法がある
  • skelearn.preprocessing から Imputer をimport、欠損値を他データの平均値で埋める(平均値で埋めてよいデータの場合)
  • Imputerのインタンスを作成、fit で学習、transform で平均値で埋める
  • Imputerの引数として strategy='median' を指定することで中央値で埋めることも可能

 

学んだこと
  • 平均値で埋める、という真面目に実装すればやや面倒なことも、最初からsklearnに準備されていてとても便利
  • クリーニングはどんなデータでも必須、ただしやり方はデータによりやり方を変えないといけない

学習データ、検証データ、テストデータについて

2時間程度の残業ならスーパーに寄ってから帰っても余裕があることがわかった

ただ明日は帰宅後スクワット、飲酒の予定なので自習はしない

 

Pythonでプログラム書くのにVSCodeを使ってるけど、なかなかいい感じ

使う上でのストレスが少ない

ほぼデフォルトでこれなので、カスタマイズの記事を漁ればよりよい使い勝手になりそう

 

学習データの分割
  • データセットを学習データとテストデータに分割し、学習データだけで識別におけるパラメータを調整することで性能を評価する
  • ロジスティック回帰のパラメータを調整する実践
  • ロジスティック回帰のCというパラメータを複数作成、Cの値を変えながら10-fold CVでどの値のCが最も精度が良いか確認する
  • 最も良かったCの値を利用し、学習データすべてで学習
  • 最後に学習した識別器でテストデータの精度を確認
  • テストデータは最後に評価する際にだけ使う、そうでないとそのテストデータのみに適合しすぎてしまう

Leave One Outについて

勉強会参加しませんでした!

理由:場所と時間を調べずに間に合うっしょ!の精神で予約したら間に合わないとわかったため

自習はします

 

音声を利用して機械学習させてみたいものが浮かんできたので、

モチベーションは維持できている

考えている機械学習ができるのかはわからないので、まずは基礎を勉強

 

Leave One Out、Leave P Out、Leave One Group Out
  • sklearn.model_selection から LeaveOneOut をimport
  • sklearn.model_selection から cross_val_score をimportし精度を計算
# cv=でloocvのオブジェクトを指定するとloocvしてくれる、数字を入れると
# StratifiedのK-fold CVをしてくれる
loocv = LeaveOneOut()
clf = linear_model.LogisticRegression()
scores = cross_val_score(clf, X, y, cv=loocv)
  • 脳の癌のデータに対してLOOCV実行、精度は95%が出るものの、1つのデータに対しテストを実行、精度を出しているため標準偏差が21%とブレが出やすい

 

  • 次にLeave P Outを試す
  • sklearn.model_selection から LeavePOut をimport
  • LeavePOutのオブジェクトを作成、LOOCVと同様に精度を計算しようとすると、全データから2個抜き出す、という組み合わせを全通り実行するので終わらない

 

  • 次にLeave One Group Outを試す
  • データセットが何かのグループごとに得られた場合に使う
  • 例:患者ごとのデータを集めたデータセット
  • グループは事前に今回の勉強用にgroupとして50のarrayを作成
  • Leave One Group Outもcross_val_scoreで計算可能
loocv = LeaveOneGroupOut()
scores = cross_val_score(clf, X, y, groups=group, cv=loocv)

 

学んだこと
  • sklearnの最初から準備されている具合がすごい、勉強する度思うけど機械学習の考え方が既に実装されていて便利
  • これだけ機械学習のライブラリが潤沢であれば、データ準備の方が大変なのでは
  • Leave One Group Outはどういった場合に使用するのが効果的なのか、識別時にどんな動きを内部でしているのか勉強が足りない