fullmated's blog

技術系や考え事、進捗などなど

Effective C++ #9

最近C++に触る機会があって勉強がてらにEffective C++をつまみ食いすることにしました。本に書いてあったことを自分なりに改変してみたのでそのメモ書き。

仮想関数をコンストラクタまたはデストラクタに書くと未定義動作を起こしてしまう。次のコードは実行時エラーを起こす。

なぜかというと、Derivedのコンストラクタ呼び出し時ではまだBaseのインスタンスのみが生成された状態のため、Derivedの情報に一切触れることができないためである。

解決策は、log()を仮想関数とすることをやめて普通のメンバ関数にし、派生クラスから情報を受け取れるようにするというものである。void log(const Info& userInfo)という感じで引数に情報クラスInfoを与えることで、仮想関数の実装を回避している。それが次のコード。

複雑な形をしたButtonでも簡単に作れるAsset「Alpha Raycaster」を使ってみる

UnityのButtonコンポーネントで作れるボタンの形は通常長方形ですが、三角形や星形などの多角形の形をしたボタンを作りたいな〜という状況があると思います。そんな場合におすすめなのがこのAlpha Raycasterです。ただし$25かかります。

https://www.assetstore.unity3d.com/jp/#!/content/28601

Alpha RaycasterはCanvas要素以下に対して用いられます。何が行われているかというと、まずAlpha Raycasterと呼ばれる本アセット独自のRayが作られます。そして、AlphaCheck.csがアタッチされたGameObjectに対してそのRayの判定が行われています。重要なのはAlphaCheck.csがアタッチされたGameObjectのImageにおいて、透明な部分はRayが当たらないけど不透明な部分はRayとぶつかるということです。透明部はクリックできないけど不透明部はクリックできる!という優れものです。

3DのRaycastやColliderではなく、Graphic Raycasterを継承して作られていたのでuGUIに対してこのアセットが使えます。

Demoを見た方が早いので画像をば。

f:id:fullmated:20170208013309g:plain

地図のように複雑な形をしているボタンにはこのアセットがとても適していると思います。  

機械学習の勉強会に行ってきた

機械学習のことをなーんにも知らない自分が、機械学習の勉強会に行ってきたので簡単にまとめます。広い会議室でまったり勉強してきました。参加者のMac率やや多めで、学生-社会人比率は半々くらい(?)でした。

【学生&若手エンジニア向け勉強会】今更聞けない機械学習の基礎と応用 - connpass

 今回は御社CTOの中村先生が機械学習のいろはについてご教授してくださいました。

 ・人工知能の分類について

大きな分類としては以下。

特化型・・・人間の知的な行動の一部を計算機で代替して実現する

汎用・・・人間の脳を計算機で作るぞ!

特化型人工知能を実現する手段として機械学習があり、機械学習の中にはクラス分類器という概念があって、クラス分類器の中の一つにDeep Learningがあるということでした。noobな私が間違えそうだったことは、

人工知能≒Deep Learning

ということです。巷でDeep Learningと人工知能の両方とも流行っているせいかDeep Learningが人工知能であると勘違いしてしまいそうでしたが、正しくは人工知能を実現するための一つの手法にDeep Learningがあるということでした。勉強会行って良かったです。

・クラス分類について

ある人が動脈硬化であるかどうかを判定するという例を用いて教えていただいた。血流に関するある2つのパラメーターがあって、そのプロットとプロットに付随するデータ(ここでは動脈硬化であるかそうでないかの二値)を元にモデルを構成し、新たな患者が動脈硬化であるかを判定するというもの。

まとめると、二つのA/Bというクラスがあって、平面にそのどちらかのクラスを持った点がプロットされている時、A群とB群の分散と群間の分散が最大になる線を引くといい感じにクラスタリングができるという話(2次元の場合

「群間の分散」「n次元空間の超平面(n-1次元空間)が得られる」という意味が分かるかどうかがポイントだった気がする。

R言語ハンズオン

Rを人生初めて触れました。実際にはクラス分類器を作ってテストデータを判定するというようなことをRで行いました。その所感です。

・R StudioでRunすると1行ずつ進んでくれたのが良かった

・Rをインストールすると初期で謎のデータセット(iris,airqualityなど)が付いてくるので、データを取ってくるめんどくささがない。そういう意味では機械学習初心者にやさしい

・LDAや線形回帰が1行で書けるところがヤバい。やはり統計分析に特化した言語なだけありますね。

・グラフがいい感じに作れる。こんな感じ↓

f:id:fullmated:20170207022046p:plain

・ホテルの宿泊人数を予想しろ!

これは難しかったです。宿泊施設の情報や宿泊者数、金額、日付・・・などから、未来の宿泊人数を機械学習を使って解くにはどうすればいいか?を考えました。私が座ってた島では、年で宿泊者数が変動することはないだろう!と考え、金額と月日に依存するという答えを一応出しました。が、最終的に講師が提示する正解は、宿泊施設の数だけモデルが作成されるとのことでした。モデルというのはz=ax+by+cにおける(a,b,c)の組み合わせのことで、この組み合わせが宿泊施設の数だけ出てくる。つまりそれだけの数の回帰分析の直線が出てくるということでした

。宿泊施設コードを考えていない時点でダメでしたね。結論としては、

・推定したい時に持っているデータを持っていてかつそれが関連性を持ちそうなものを説明変数に用いるべきである
(ex)未来のお客様の決済方法などは、推定したい時に持っているデータではない。

ということのようです。データサイエンティストになるためにはビジネスの考え方が必要なんだなあということを実感しました。なぜ回帰を使うのか?という理由が自分の中で怪しいのでこれも復習しないとダメですね…。→データには離散値と連続値があり、今回は宿泊人数を連続とみなせるから回帰がいいとのことです。。離散として扱うならχ^2検定などが使えるでしょうか・・・。

・以下、雑記、思ったことなど

・Deep Learningの悪いところとして、何をやっているのか人間に理解できない
→ということは人をたくさん集めて肉体労働のごとくCNN層の組み合わせを考えてもらうという博打もありなのでは?自動化の金脈みたいなものではなかろうか?(極論かもしれない

・発表中にLINE風の会話のスライドが使われていましたが、つい読みたくなるな〜と思わせるものだったので、もし自分がプレゼンつくるときは真似してみたいと思った

・最近発売された「ゼロからはじめるデータサイエンス」をぱらっと見たときに覚えていた単語が今日の勉強会にも出てきたので、暇な時にちゃんとこの本を読みたい

・社長は二郎マニアで、じろっかそんをたまに開いている

 

今までこういう勉強会に参加したことがなかったのでとても良かったです。スライドをもう一度見たいのでうpを期待してます。また参加したいです!