ASP.NET Web Forms でAutoFacを試す。
今さら感はあるけど、ASP.NET Web Formsで依存性の注入(DI)をやってみた。使ったのはAutoFacです。ちょうど最近MSDNのブログでASP.NET Web FormsにUnityを入れるという投稿があったけど、これは.NET Framework 4.7以降じゃないとダメなので断念。
上はMSDNとAutoFacのチュートリアル。チュートリアルはAutoFacの方が丁寧で分かりやすいけど、MSDN Blogの投稿コメントがなかなか面白い。
Web Forms — Autofac 4.0 documentation
すごいいいタイミングでUnityというDIライブラリをASP.NET Web Formsに導入するサンプルが出てるけど、これは、.NET Framework 4.7を使ってて、今のプロジェクトでは使えない、、、。AutoFacより簡単そうなのに残念。
定義をファイルから入れるようにしている人がいた。
社会人のためのデータサイエンス入門 第2週 関係の見方・相関係数
2つの変数の関係の見方を扱う。2つの変数が関係があるかどうかを見る場合にはまず、2つの軸の散布図を描く。そうするとなんとなく関係がありそうかどうかが分かる。
統計局のHPより
この散布図の情報を数値化して表すのが共分散である。共分散は、データ1つずつについて、変数1と変数2のそれぞれの平均との差をかけあわせた値を、データ全てで合計したものである。この値が0に近いと変数の間での関係は少なく、0から離れていると変数の間で関連があると見れる。
ただし、この値は単位の取り方によって値が大きく変わってしまう。平方メートルから平方センチメートルにすると上の散布図の共分散の値は大きくなる。
これを避けるために利用されるのが、相関係数である。相関係数は、単位を気にせず、変数間の関連を見ることができる値である。相関係数は、上の共分散を変数ごとの標準偏差の積で割ります。
共分散を標準偏差の積で割ることで、単位がそろい、結果として得られる相関係数は-1~+1までの値となる。-1に近ければ負の相関、+1に近ければ正の相関、0に近ければ相関がないということになる。
ただし、この相関係数は、変数間の直線的な関係性を見るのには良いが、曲線のパターンが現れていても相関係数は小さく見えるし、外れ値があると、大部分のデータを無視して相関が強く、または弱く出たりする。
社会人のためのデータサイエンス入門 第2週 箱ひげ図、パーセンタイル
中央値を利用したデータの表し方に箱ひげ図がある。私の箱ひげ図のイメージは為替相場の変動のグラフのイメージ。今調べたらこれはローソクというらしい。
箱ひげ図は、データをその個数で4等分して、分布の範囲を可視化する図です。25%~75%を箱として表示し、50%のところに線を引きます。そして、25%から50%、50~75%の間の距離の1.5倍の部分に一番近い値で線を引き、その外側の値を外れ値とする。
このような図で表すことによって、狭いスペースでもデータのばらつきを表現することができる。
また、これに時系列の変化を組み合わせて見たい場合に利用するのがパーセンタイルである。パーセンタイルとは四分位、25%よりも細かくデータを分割してそれを表や図にする。一般的な例としては、赤ちゃんの成長曲線だろうか。年齢と体重、または身長の推移を低い方のXXパーセント、高いほうのXXパーセントで線を引き、おおむねこの枠内に収まるだろうという目安を提供している。
詳しくは母子手帳をご参照ください。
講演に行ってきた。「プロジェクト&プログラム・アナリシス研究部会」6/7
これに行ってきた。講師はギルドワークス代表の市谷聡啓さん。20分くらい遅刻したがとても中身の濃い講演だった。
色々と講演資料が上がっているので今回の講演もそのうちにアップされるかも。
講演のタイトルは「アジャイル開発の実際」で、アジャイルの入門的な講義ながらも市谷さんの経験や観点に基づいた話で面白かった。
以下心に残った話を。
アジャイルが向くプロジェクトとは。機能の種類、完成度が決まっているものはアジャイル開発向きではない。それ以外はアジャイルで行ける。ただし、機能の種類、完成度についてはスコープを変える可能性があることを顧客と合意できる。機能の種類または完成度を工数に応じて調整するよう事前に合意しておくと良いとか。完成度にコミットした場合は、特定の期間内にひとそろいの機能が出来上がらない可能性もある。一方機能の種類にコミットした場合は完成度は低いながらも一通りの機能は出来上がる。こちらの場合は、完成度を松竹梅に分けて、工数に応じて完成させる。講師は契約では請負契約で、機能の種類にコミットする。但し書きで完成度についてスコープの調整を行う可能性があることを明らかにしておく。
アジャイルを取り入れるときにアジャイルをやると思わずに、アジャイルの一つの型を取り入れると考えるとよい。失敗したのはアジャイルではなくアジャイルのプラクティス。他のやり方だとうまく行くのではと考えられる。
アジャイルでは少しずつ形にすることができる。これは体をコントロールするのに似ている。体のコントロールでは目で見て、考え、体を動かす。これはちゃんとフィードバックが得られる。見る、考える部分が仮説思考、体を動かすというのがアジャイル開発。見る、考えるというのはプロジェクトでいうとバックログを作る、ユーザーを見るといった作業となる。体を動かすというのはコミュニケーションを取りにいく、手を動かすといった作業となる。
アジャイルはチームを一人の人間として捉えると、外部を観察し、体を動か巣といった形で機能しているはずで、そうでなければ、チームがうまく回っていないということ。
Intro to Machine Learning Lesson8 Outliers 外れ値の除外がまだ終わらない
Udacityのこの単元では、Pythonのコードで実際に外れ値を除去して、単回帰分析の精度を上げる練習を行う。
それで、コードはほとんどセットアップされていて、書くべきコードはnumpyのndarrayで、年齢、年収、予測年収のリストを受け取って、予測年収と年収のかい離が大きい10件の外れ値のTupleを返す。
まずは、numpyの配列の計算がすごく楽なのが勉強になった(笑)
配列と配列は+演算子で項目ごとに足せるし、配列の結合も簡単。
ただ、外れ値上位10%のインデックスが拾えない、、、。先頭4件はこんな感じのndarrayでここから、差をerrorsにつめて、errorsの値上位10件のインデックスが欲しいけど、とれない。
print(predictions[[range(0, 4)]])
[[314.65206822]
[314.65206822]
[197.85966342]
[350.19758273]]
print(ages[[range(0, 4)]])
[[57]
[57]
[34]
[64]]
print(net_worths[[range(0, 4)]])
[[338.08951849]
[344.21586776]
[243.79287312]
[378.84578142]]
errors = numpy.round(numpy.sqrt(numpy.square(predictions - net_worths)))
count = int(errors.size * 0.1)
idxs = numpy.argpartition(errors, -1, 0, -count)[-count: ]
このサイトを参考にしたけど、配列の形式が違うからか。
誰か助けて。
2018/06/09追記
結局、自分で調べてもダメだったのでUdacityのForumを参考にしながら解決。
最終的にこんなコードになりました。
errors = numpy.round(numpy.sqrt(numpy.square(predictions - net_worths)))
#予測値と実際の値の差をリストで取得(差を2乗して平方根を求めることで、マイナスをなくす)
data = numpy.c_[ages, net_worths, errors]
#行列を結合して、データをひとまとまりにする
data = data[data[:, 2].argsort()[::-1]]
#3つ目の要素でデータをソートする
count = round(errors.size * 0.1)
#外れ値とするデータの個数を計算(10パーセント)
array = data.tolist()
#データをリストに変換
del array[0: count]
#外れ値でないデータを削除
for item in array:
#対象のデータを1件ずつタプルに変換
cleaned_data.append(tuple(item))
return cleaned_data
社会人のためのデータサイエンス入門 第2週 分散、標準偏差
2つのデータで平均、中央値、中央値が同じ場合でもデータのばらつき具合が異なる場合がある。(例えば、10年前と現在の年収の統計など)
データのばらつき、偏差を知るために、平均値との差を基準にしたいが、そうやって足していくとプラスとマイナスのばらつきがあるため合計するとばらつきが0となってしまう。それを避けるために、平均値との差を2乗して足してやる。このように平均値との差を合計して平均をとった値のことを分散という。これによりデータのばらつきがどのくらいあるかがわかる。
ただし、これだと単位も2乗となっているため、分散の平方根をとることで元の単位に戻すことができる。これを標準偏差という。この標準偏差が大きいほどデータにばらつきがあることを示す。
この標準偏差を用いて、平均からのデータの偏りを標準化した指標で測ることができる。例えば、試験で前回は問題が簡単で、今回は難しいといった場合に、テストの点数だけを比較してもいいのか悪いのか分からない。しかし、平均からの偏りであれば、比較することができる。このように個々の値を標準化することを変数の標準化という。
以下の式で求める。
(値-平均)/標準偏差
この操作により、-1から+1の間にデータの半分くらいが収まる。これを応用したのが、偏差値である。
偏差値は以下の式で求める。
(((値-平均)/標準偏差)× 10)+50
今まで偏差値にはいい思い出なかったけど偏差値というものは面白い。
外れ値(Outlier)にはどんなものがあるか Intro to Machine Learning Lesson8
外れ値(Outlier)には以下のようなものが含まれる
センサーの異常(sensor malfunctions)
データの入力ミス(data entry errors)
想定外の出来事(freak event)
センサーの異常、データの入力ミスは除外すべきだが、想定外の出来事は状況に応じて、除外したい場合、そうでない場合がある。