Kadenze「Machine Learning for Musicians and Artists」の講義メモ

#Kadenze「Machine Learning for Musicians and Artists」とは?
![スクリーンショット 2016-04-26 21.15.01.png](https://qiita-image-store.s3.amazonaws.com/0/26043/0594e0ad-cdce-700e-49ad-2bb686027ffa.png)

[Machine Learning for Musicians and Artists - an Online Machine Art Course at Kadenze](https://www.kadenze.com/courses/machine-learning-for-musicians-and-artists/info)

「MACHINE LEARNING FOR MUSICIANS AND ARTISTS」はe-learningサイトKadenzeの講義名である。ミュージシャンやアーティストの作品制作向けに、機械学習の講義が行なわれている。

##講師紹介
![スクリーンショット 2016-04-26 21.23.01.png](https://qiita-image-store.s3.amazonaws.com/0/26043/1b409209-d22d-f2de-6a71-dc96a5a8baa1.png)
講師は[Rebecca Fiebrink(@RebeccaFiebrink)さん](https://twitter.com/rebeccafiebrink)。ロンドンのゴールドスミス大学の講師の方。

#Session1
Introductionなので省略。

#Session2 Classification

- 位置によって音を変える
    - ダンサーの動きを想定
    - flow
        - input
        - model
            - 教師あり学習
                - ダンサーの位置とラベル付け
                - left right
        - output
- Building a Simple Classifier
    - wikinator 
    - 低い音、高い音の位置をプロット
    - trainingさせる
- Nearest Neighbor and Decision Stump Algorithms
    - 一番近い点に注目
    - decision stump
        - thresholdを持つ
        - 座標で判定
- Decision Boundaries and Comparing Classifiers 
    - processingのbuttonを押すと領域を描画
    - nearest alogrithnmなどのアルゴリズムを選択できる
        - 境界が曲線で複雑
    - decision stumpではうまく境界を引けない場合がある
        - 実際はnoiseが混じる場合がある
        - sensitiviすぎると境界がおかしくなる
    - k-nearest
        - 3-nearest neighbor
        - 3は変えられる
- Working with Multiple Classes; Decision Trees
    - 3つ以上の変数を考える
        - red,blue,green
    - decision stumpはおかしくなる
        - one decision node
        - decision treeを使う
        - 3つでも分けられる
- Artistic Applications of Classification
    - labelありdata
    - credit cardの不正利用
    - medical condition
    - email spam
    - face position
    - prior shopping
    - 妊娠しているのかを商品購入履歴から聞く
    - music
        - genre
        - note
        - enjoy
    - humans
        - position,pose
        - location in room
        - EEG sensor
    - other
        - tweet angry
        - raining?
    - sound
        - instrument
        - chrod
    - animaition
        - color
        - object
        - generative algorithnm
    - classificationがマッチするのか考える必要
- Features
    - poolの中にダンサーがいると3次元
    - 100次元なんかもある
    - leap motion
        - 15次元
        - 指の位置
        - 5本の指で3次元
    - 指を広げる、閉じるの位置をtraining
    - 15次元を可視化するのは難しい
    - wekinatorがデータを保持している
    - spleed sheetはcomputor扱いやすい
- Features Selection
    - finger up, downで音を変える
    - 一つの指で判定してみる
    - 他の指の位置を無視する
    - wikinatorでどの指を見るのか選択
    - 水平線上に点を打つ
        - y featureを見ない
        - feature selectionが大事
- Anatomy of a musical classification system: Blinky
    - lap top オーケストラ
    - webcam
    - ライトを読み込んで音を鳴らす
    - 18 features
    - six classes
- Practical tips for building classifiers with Wekinator
    - drum example
    - 位置でdrumの音を変える
- Conclusion
    - 他のアルゴリズムも今後学ぶ

#Session3:Regression
- what is regression
	- 楽器を例にする
	- kinect
	- chuck
	- 手の位置で音を変える
	- smoothly change
	- outputがnumber
	- two types
		- linear regression
		- neural networks
- what is a regression model
	- x positionだけ入力してみる
	- hand positionで変える
		- low pitch
		- high pitch
	- train
		- train後、点を打つ
		- 位置により音の高さが変わる
	- draw line
	- linear regression
		- y = ax + b
		- complicate y = ax + bx + c
		- 直線になるのでばらつきがあるとはっきり分けることができない
- Polynomial regression
	- parabola
		- 二次曲線
		- y = ax^2 + bx + c
	- 次元が増えると複雑な曲線になる
- Which regression model is best?
	- どういうときにどのモデルを選択するのが良いのか
	- nearest neibourはnoiseにsensitive
	- dataによって回帰の曲線がかなり変わる
	- bestなアルゴリズムはない
- Introduction to neural networks for regression
	- unitをneuron
	- weightとbias
	- valueはtrainによってセット
	- s shape fuction
		- 0に近づくと05
		- sigmoid
	- perception
		- 1つのニューロン
	- layerを構成
	- input layer
		- handx,y,z
		- layerを重ねる
		- hidden layer
	- outputは一つ
- Using neural networks
	- wekinatorのdefaultはhidden layerが一つ
	- nodeごとにsigmoid
	- 曲線がsigmoidになる
	- うまくいかない場合もある
	- better curve
		- add hidden node
		- add hidden layer
	- more node
		- neuralnet work
		- complexityがあがる
	- no free lunch
		- no best algorithnm
- Mapping and creation of new expressive
	- interface design
	- buttonを怒って押そうが結果は同じ
	- violine
		-  position
		- speed
		- complicated wayで演奏される
		- ボタンとは違う
	- color
		- patternなど
	- hardware to software
	- one instance
		- アコースティック
	- midi controller
	- one to oneは演奏難しい
	- input mapping out dozen
	- wekinator
		- all to all mapping
- The Blotar comes alive
	- game track
	- USB接続
	- joy stick
		- 3次元が二つ
	- max
	- easy to controll
- Training as optimization: Linear and polynomical
	- 数式の説明
- Training neural networks
	- optimazation problem
		- unknown values
		- objective function
	- random numberをevaluate
	- smarter search
		- changing unknown value
		- 変数を少しずつ変えて調整する
	- derivative score
	- Gradient descent
	- Back propagation
		- output
		- gradient descentを使う
		- behind out layerのnodeを見る
		- weka
- Pratical tips for using regression with Wikinator
- Conclusion

#Session 4: Classification, Part II; Design considerations
 
 - Overview
	 - classifier
	 - どのようにモデルを作るか
	 - どのようなアルゴリズムが良いのか経験的に知っている
 - What is a good classifier
	 - noiseがあるか
	 - Cはマッチしすぎ
	 - Occams Razor
		 - classifierを複雑にしすぎない
 - K-nearest Neighbor; Reasoning about Feature Spaces
	 - ユークリッド
	 - 距離の公式
	 - features
		 - heart rate
	 - classes
		 - calm
		 - excited
	 - 距離が近い方を該当クラスに
	 - Kはparameterを表す
	 - 1-nearestよりは計算時間かかる
	 - overfit
		 - データにフィットしすぎ
 - Naive Bayes
	 - class1,2になる確率
	 - fox,cat
	 - foxが庭に来る
	 - webcamで監視
	 - cat,foxの体の大きさを調べる
	 - foxes
		 - 平均の大きさが密集している
		 - とても大きい、小さいが少ない
	 - cat90%
	 - fox10%
	 - bayes rule
	 - body length以外も試せる
	 - fast training
	 - [ナイーブベイズ分類器を頑張って丁寧に解説してみる - Qiita](http://qiita.com/aflc/items/13fe52243c35d3b678b0)
 - Decision Stumps and Decision Trees
	 - labelが間違っている場合
		 - BかCのLine
		 - Cが良いのはmiddleだから
			 - ocamn razor
	 - entropy
		 - entropyが低いようにdecision nodeを決める
	 - C4.5アルゴリズム
		 - [C4.5 - Wikipedia](https://ja.wikipedia.org/wiki/C4.5)
 - AdaBoost
	 - 外れたデータをweight
	 - unweighted error
		 - 広がった境界に加わったデータ
		 - またweightする
		 - iterationする
 - [AdaBoost - Wikipedia](https://ja.wikipedia.org/wiki/AdaBoost)
 - Support Vector Machines
	 - marginを最大化
	 - circle boundary
	 - 3次元にして単純な線で切る
	 - 2次元にすると境界ができている
	 - higher dimentionnal
		 - kernel
	 - RBF
	 - Cが多すぎるとoverfit
	 - kernelのタイプによってうまくいくかが変わる
 - Evaluating Classifiers
	 - 複数のアルゴリズムを試して良いのを選ぶ
	 - cross-validation
	 - hould out test
	 - テストを繰り返す
	 - average fold accuracy
 - Using a Probability Distribution Over Classes
	 - 手の位置で音を変える
 - Using more than one classifier at once

#Session 5: Sensors and features: Generating useful inputs for machine learning
- Intro
- Smoothing and Filtering: Arduino Demo
- Video Feature
	- oF addon
	- color tracking
		- RGB space
		- pixel
	- Fiducials
		- 回転もとれる
	- Haar cascades
		- 顔認識など
		- sunglassesをつける
		- ada boostを使用
	- Frame前後の比較
		- moving quickly
		- pixelに変化
	- Optical flow
		- [moostrik/ofxFlowTools: openframeworks addon. Combines 2D fluid simulation, optical flow and more using GLSL shaders. Works best with live camera input.](https://github.com/moostrik/ofxFlowTools)
- How Fast to send them?
	- wkinator
	- featureを早く送る
	- 録音時間が長いと時間もかかる