読者です 読者をやめる 読者になる 読者になる

駄文型

プログラミングとか英語とかの話題を中心にした至極ちゃらんぽらんな日記です。

Rによるデータサイエンス 読書メモ その3(所感あり)

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

目次

koheikimura.hatenablog.com

の続き。

16章 集団学習

  • 複数のモデルを組合せて精度の高いモデルを構築する手法
  • バギング libraly(adabag) bagging
    • ブートストラップというリサンプリング法で複数の学習データセットを作成
  • ブースティング boosting
    • 逐次重みの調整を繰り返す
  • ランダムフォレスト libraly(randomForest) randamForest
    • ランダムサンプリングしたデータに対してバギングを適用
    • 精度および計算リソースの節約の面でバギングとブースティングより ◯

17章 カーネル法サポートベクターマシン

  • カーネル法: カーネル関数 にりデータを別空間に射影
    • 別空間に射影すれば非線形データを線形モデルで分類できる可能性がある
  • カーネル主成分分析 libraly(kernlab) kpca
  • サポートベクタマシン ksvm

18章 ニューラルネットワーク

  • 神経細胞ニューロン)が多数並列に接続されたシステムを数理的にモデル化したもの
  • 出力結果が目標値に近づくように重みを変える計算を繰り返す
  • パターン認識,分類,ノイズが混在しているデータの処理が得意
  • モデルの分類
    • 教師あり ⇔ 教師なし
    • 階層型ネットワーク ⇔ 非階層型ネットワーク
  • 中間層ありの NN パッケージ nnet

深層学習

  • 階層型ネットワークに属す
  • 中間層を多く用いるため計算量が多い
  • 画像認識,音声認識 → 畳み込みNN (CNN)
  • 時系列データ → 再帰型 NN (RNN)
  • パッケージ ho2 darch mxnet deepnet など
    • この本では ho2 を例に
  • アルゴリズム,隠れ層の数,各層のユニット数,学習の回数をデータ構造に基いて決める必要がある
    • 関連知識と経験が必要

19章 ネットワーク分析

  • 何らかの関係の有無や度合いを分析
  • グラフ理論に基礎をおいていいるためグラフ分析とも
  • 隣接行列の作成 libraly(igraph) graph.adjacency
  • データフレームからグラフオブジェクトに変換 graph.data.frame
  • ネットワークの統計量
    • ノード数 vcount
    • エッジ数 ecount
    • 隣接ノード neighbors
    • 次数(自由度) degree
    • 密度 graph.density
    • 中心性 定義によっていろいろ(次数中心性,接近中心性など)
    • クラスターの係数 transitivity 隣り合うノードの間に三角形グループがいくつあるか
    • ニューマンの次数の相関係数 assortativity.degree 2つのノード間の次数の関連性
    • 最短パス値 shortest.paths
    • 平均パス average.path.length
  • 次数の平均,密度,中心性,クラスター係数などから複雑さを比較可能
  • グラフ間の差分 graph.difference
  • コミュニティ抽出 p244 表19.6
  • オーバーラッピングを許すコミュニティ抽出 linkcomm
  • ベイジアンネットワーク: 因果関係を推測

20章 アソシエーション分析

  • マーケット・バスケット・トランザクションデータの分析
  • libraly(arules)
  • 相関ルール apriori 商品の組合せの規則を抽出
  • 頻出アイテムの抽出 eclat
  • 抽出結果の補助分析 dissimilarity

21章 時系列分析

  • 時系列データ: 一定の時間間隔で測定・観測したデータ
  • libraly(stats)
  • 時系列データの図示 ts.plot
  • 自己共分散と自己相関
  • スペクトル分析 spec.pgram 周期性を解析(トレンドやノイズを除去するようなイメージ)
  • 単位今検定 libraly(tseris) adf.text データがランダムウォークかどうか
  • AR(自己回帰)モデル ar
  • ARMA/ARIMAモデル arima ARモデルに誤差の移動平均を加えたモデル
  • 成分の分解 stl トレンド,周期変動,残差に分解

22章 生存分析

  • イベントが起きるまでの時間とイベントとの関係に焦点
  • 機械システムの故障や患者の疾患,死亡を対象
  • libraly(survival)
  • ノンパラメトリックモデル survfit
  • セミパラメトリックモデル coxph
  • パラメトリックモデル survreg
  • 共変量(時間以外の説明変数)の有無,分布を仮定するか否かに違い

全体の感想

網羅的に手法をカバーしているので課題に対してどの手法を使うべきか?の検討に使うことができる。網羅的な分,説明が短いので入門書として使うのは厳しい。Rについても統計についても,すでにある程度知っている,あるいは昔学習したが忘れているくらいの知識レベルだとちょうどいい印象。Rの関数の使い方だけでなく,結果データの見方や手法の選び方も解説しているので実用性は高い。一度目を通しておけばリファレンスとして使えそう。さらに深く知りたければ参考文献に載っている各手法の専門書を読むとよさそう。

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

広告を非表示にする

Rによるデータサイエンス 読書メモ その2

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

目次

koheikimura.hatenablog.com

の続き。

9章 クラスター分析

  • 個体や変数を分類する方法は教師ありと教師なしに大別される
  • この章では教師なしの場合

階層的クラスター分析

  • 樹形図(dendrogram)ができる
  • クラスタリング法,凝縮型階層手法とも
  • プロセス
    1. データから距離(あるいは類似度)を求める dist
    2. クラスター分析の手法を選択 hclust
    3. コーフェン行列を求める
    4. 樹形図を作成 plot
    5. 結果について検討 heatmap
  • 近い個体から順にペアにしてクラスタを作っていくようなイメージ
  • クラスタ間の距離を求める必要がある

その他

  • k平均法 kmeans
  • モデルに基づいたクラスター分析 hclass

10章 自己組織化マップ

  • わからん

11章 線形回帰分析

  • 回帰分析とは: 説明変数をから目的変数を求めることができる統計モデルをつくる
  • 線形回帰分析: 目的変数と説明変数を1次関数の関係としてモデル化
  • 非線形回帰分析: 2次関数以上
  • 線形単回帰分析 lm
    • 最小二乗法
    • 説明変数が1つ
  • 線形重回帰分析 lm
    • 単に 重回帰分析 と言った場合,線形重回帰分析を指す
    • 説明変数が複数

12章 非線形回帰分析

  • ロジスティック回帰 nls
    • ロジスティック関数 y = a / (1 + b * e^cx) を用いる
  • 多項式回帰 nls
    • 例えば3次多項式の場合 y = a + b * x + c * x^2 + d * x^3
  • 一般線形モデル glm
  • 平滑化回帰
    • わからん

13章 線形判別分析

  • 判別分析: 学習データを用いて判別モデルを構築,所属不明の個体の識別に使う
  • 線形判別分析は散布図にプロットされた個体を直線で分割するイメージ(p162 図13.1)
  • library(MASS) lda
  • 学習データとテストデータを分ける手法として 交差確認 がある
    • lda に引数 CV=TRUE を渡す
  • 線形判別分析は等分散の制約条件があることと,大量の変数には向いていないため非線形判別分析に押され気味らしい

14章 非線形判別分析

  • library(MASS)
  • 二次式による判別分析 qda 使い方は lda とほぼおなじ
  • k 最近傍法が最も多く用いられる
  • 近年では機械学習のアプローチによる判別分析が提案(15〜19章)

距離による判別分析

  • 学習データからグループの中心を求め,未知の個体は中心との距離が一番小さいグループに属すると判別
  • グループ数が3以上でも使える
  • データの確率分布かの条件もない
  • マハラノビス距離が多く用いられる mahalanobis

k 最近傍法(k最近隣法,k-NN法) knn

  • library(klaR)
  • 判別する個体の周辺 k 個の多数決でグループを決定
  • 距離の測度としては ユークリッド距離 が一般的
  • k の値は何がいいか明確な基準はなく,データに依存
  • 九工大の実証実験で使用

ベイズ判別法

  • 個体がグループに属する確率を ベイズ定理 で求め,最大のグループに属すると判別
  • 分布条件あり
  • library(klaR) NaitiveBayes

15章 ツリーモデル

  • 回帰分析,判別分析の1つ
  • 回帰木,分類木,決定木とも
  • 説明変数の値を何らかの基準で分岐させ,判別・予測のモデルを構築
  • rpart
  • ツリーのグラフ rpart.plot plot.party fancyRpartPlot
  • rpart のほかに tree , ctree パッケージもある
    • ctree は回帰木は作れない

次はこちら:

koheikimura.hatenablog.com

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

広告を非表示にする

Rによるデータサイエンス 読書メモ その1

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

目次

第I部 Rとデータマイニングの基礎

構文や基本的な関数など,基本のおさらい。統計の用語も軽く説明がある。Rを使ったことがあるが体系的に勉強してない or Rを久しぶりに使う など再入門にちょうどいい。初心者向けではない。

1章 データマイニングR言語

  • オブジェクト、関数、制御文、RStudio、パッケージ

2章 データの入出力と編集

  • ベクトル、行列、データフレーム、配列、リスト
  • 入力 read.csv, scan
  • 出力 write, write.table, sink
  • 結合 rbind, cbind
  • 並び替え sort, rev, sort.list
  • よく使う関数一覧 p28
  • データの尺度
    • 量的データ: 間隔尺度、比例尺度
    • 質的データ: 名目尺度、順序尺度
  • summary

3章 データの演算と固有値,基本統計量

4章 データの可視化

  • 棒グラフ,円グラフ,ヒストグラム,折れ線グラフ,箱ひげ図,散布図
  • 作図環境とグラフの利用
    • ここは無視してRStudio使った方がいいと思う

第II部 Rによるデータ解析・データマイニング

ここからが本題。

5章 主成分分析

  • 多変数データを少ない変数に縮約する
  • princomp

6章 因子分析

  • 変数間の相関関係から共通因子を求める
  • 例: 教科(算数,理科,国語など)別の成績データから2つの因子(理系,文系)にまとめる
  • factanal シンプルだがカスタマイズ性が低い,最尤法のみ
  • psych パッケージ fa 因子の推定法を指定可能
  • 因子の推定方法や回転方法によって結果が変わることがある
    • 探索的に方法を変えて結果を見る必要がある

7章 対応分析

  • わからん

8章 多次元尺度法

  • MDS: Multi-Dimensional Scaling
  • データの個体間の類似度or距離を2〜3次元に射影
  • データの構造やパターンを考察可能
  • パッケージ stats 関数 dist, cmdscale

次はこちら:

koheikimura.hatenablog.com

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

広告を非表示にする

現代人のための統計リテラシーその1 構成概念を直接測定しようとしてはいけない

観察しようとする構成概念を直接測定しようとしてはいけない。これは心理学系の研究において常識であり鉄則である。構成概念は文字通り概念であり、そもそも直接測定できない。

構成概念

construct

理研究などにおいて、人の行動のメカニズムを説明するために、研究者によって人為的に構成された概念のこと。

構成概念の例として「思いやり」、「リーダーシップ」、「社交性」などが挙げられるが、これらは直に見たり、測定したりすることはできない。そのため、ある構成概念の存在を仮定した場合、その構成概念の影響を受けるであろう複数の行動や態度を測定し、構成概念の存在を検証する。因子分析は構成概念の探索や検証に用いることの多い手法であり、抽出された因子を構成概念と見なしている。

構成概念 | 統計用語集 | 統計WEB

素人がアンケートを作成すると、しばしば「構成概念を直接測定しようとした」アンケートが生まれる。例えば、従業員満足度を調査しようとして以下のような質問を設けるのはあまり有効な方法ではない。

Q. あなたは現在の業務に満足していますか。
5. 満足 - 4. やや満足 - 3. 普通 - 2. やや不満 - 1. 不満

これは構成概念を直接測定しようとした質問の典型だ。この質問でわかるのは「従業員が【あなたは現在の業務に満足していますか。】という質問に対して何と答えたか」であって、「従業員の業務への満足度」ではない。「従業員の業務への満足度」を測定したいなら、「従業員の業務への満足度」とは何かを定義し、分解し、客観的・定量的に測定可能な変数まで分解する必要がある。たとえば「従業員の業務への満足度」という構成概念の場合、以下のように分解できる。

従業員の業務への満足度
├── 希望する業務内容と現状の業務との距離
│   ├── 現在の業務内容
│   ├── 希望する業務内容
└── 業務量
    ├── 現在の業務量
    └── 残業時間 など
※この分解が妥当かどうかはひとまず置いておいてください。

ある程度分解していけば、直接測定可能な変数まで落とし込める。構成概念はこれらの変数の総体であり、直接測定することはできない。

直接測定すべきでないのは、なにもこういった概念に限らない。自然科学の分野においても、多くの場合観測したいものを直接測定できないので、しない。中学校の理科の実験を思い出してほしい。目に見えない二酸化炭素を観測するには石灰水を使う。石灰水に二酸化炭素を吹き込むと、炭酸カルシウムが生成し、白濁する。実験では二酸化炭素を直接観測しようとせず、石灰水の白濁を観測する。

物理量には適正な測定方法があり、構成概念もまた同じである。適正に分解して構成概念を観測できず、さらにその先にある目標を達成できない。

その1としたけど続かないかもしれない。

統計学が最強の学問である

統計学が最強の学問である

統計学が最強の学問である[実践編]---データ分析のための思想と方法

統計学が最強の学問である[実践編]---データ分析のための思想と方法

広告を非表示にする

今日こそ始めるソースコード・リーディング Node.js のコードを読んでみよう

細かくカスタマイズできるメソッドを実装しようとして、引数が多くなってしまうことがある。オプションを引数で渡すことになる。デフォルト引数を利用して省略可な引数を用意したいが、一番後ろは必須のこれがいいみたいなケースがないだろうか。僕は4年に1回くらいある気がする。最後尾の引数はコールバック関数に、というのは Node.js だとよくある気がする。そういえば fs.readFile() なんかは真ん中にオプションを詰め込むタイプになっている。どう実装するのが一番普通なんだろうか。気になったので Node.js のソースを読むことにする。

フォークしてローカルにダウンロード

別にフォークしなくても git clone git@github.com:nodejs/node.git でダウンロードできる。フォークするのは「俺は〇〇っていうフレームワークを読んでいるぜ」というのをアピールするためでもあるし、フォークしておけばなんとなくテンションが上って自分のモチベーションが上がる気がするからだ。ストイックな方はフォークしなくてよい。

https://github.com/nodejs/node にアクセスして右上にある Fork ボタンを押してフォークしよう。簡単すぎる。GitHubってすごい。フォークしたらそこから git clone でクローンしよう。軽く読むだけならクローンしなくてもブラウザでいい。

読む

fs.readFile()

前置きが無駄に長くなったが、ソースを読んで見る。 fs.readFile()lib/fs.js にある。

arguments[arguments.length - 1] で最後尾の要素を取って maybeCallback に渡しているようだ。この時点で似たような機能がない言語だと同じように実装できないことがわかる。つらい。

ところでこのコードは gist-it で持ってきているのだが、非常に便利。下記のスクリプトでいける。

<script src="http://gist-it.appspot.com/github/kohei-kimura/node/blob/master/lib/fs.js?slice=271:298"></script>

参考にしたエントリ: はてなブログでGitHubのコードを貼り付け/引用する - メンチカツには醤油でしょ!!

maybeCallback

maybeCallback では型のチェックをしているだけのようだ。 retthow() は同じく lib/fs.js で定義されているがここでは省略する。単にエラーなら thow するだけの関数だ。 fs.readFile() にコールバック関数を渡さなければこれがコールバック関数になるようだ。

getOptions

まず fs.readFile() にオプションを渡さなければ、optionsは未定義かnullかコールバック関数が入っているはずなので、デフォルトを返す。

で、stringの場合はエンコーディング設定にして、objectならそのまま返す。ここで自分が勘違いしていたことに気づいた。fs.readFile()

fs.readFile("file.txt", "utf-8", "r", callback);

などとすれば、いい感じに引数を解釈してオプションをセットしてくれるのかと思っていたが、オプションが複数ある場合はちゃんとオブジェクトで渡さないとだめなようだ。ちゃんとドキュメントにもそう書いてある

感想

結構普通だった。自分の勘違いにも気づけてよかったのでソース読むの大事だね(泣)

具体的なモチベーション重要。ただ漠然と「勉強になるって言うし、フレームワークのソース読んでみよう」と思っても量が多すぎて理解できない。自分がいつも使っているフレームワーク・ライブラリで「そういえばこの辺の処理どうなってるんだろう」と疑問が湧いたらその部分だけ読むと、自分が読むべき範囲が限られるのでよい。というか、仕事のプロジェクトでいきなり既存のコード全体読んだりしないよね。機能追加やバグフィックスというゴールがあって、そのために必要な箇所を都度読んでいくことが多い。OSSも同じだ。なんか「レールズのコードは勉強になるってみんな言ってる!読まなきゃ!(焦)」みたいな漠然としたモチベーションで始めてもうまくいくはずなかった。それで年間12回くらい挫折してる。みんなって誰だよ。まずは自分の分かる範囲の浅いところからはじめて、少しずつ深めていけばよいのだ。仕事と同じだ。OSSだからって変な肩肘張ってた。

あとは、そのフレームワーク・ライブラリのユーザーとして使いこなせるようになるのが先。使いこなしてないってことは、まだ仕様を理解できてないってことだし、仕様がわからないコード読んでもわかるわけない。こんな当たり前すぎることに何故気づかなかったのか。

広告を非表示にする

開発者のための #OpenShift Tips

一応都度更新するかもしれないので、Gistで上げておいた。

OpenShift for Developers: A Guide for Impatient Beginners

OpenShift for Developers: A Guide for Impatient Beginners

広告を非表示にする

React.jsで1年アルバムを作成するWebサービスを子育ての合間に作った

動機

娘が10ヶ月になり、写真を見返すことで成長を実感できるようになってきた。ベビーアルバム(↓のようなもの)もかなり充実してきた。そこで同じように月ごとの写真を選んで並べるようなWebサービスがあると嬉しいんじゃないかと思って作ってみた。React.jsもチュートリアルだけやって特に使う機会もなかったので、個人プロジェクトを始めてみようというモチベーションをぶつけてみた。

成果物

kohei-kimura.github.io

f:id:koheikimura:20161228225840p:plain

ソースコード

github.com

現在の仕様

  • 月ごとに好きな写真を選んで1ページのアルバムを作ることができる。
  • 画像をクリックして写真を変更する。
    • 画像はローカルから選択できる。
  • アルバムタイトル、アルバムの説明、写真の説明は自由に変更可能。
  • リロードするとすべて消える。

今後の対応

  • README書く
  • 保存・SNSシェア機能
    • 現在の仕様だと作ってもファイルとして保存したり印刷したりする以外に保存する方法がない
    • 簡単にシェアできるようにしたい
  • リファクタ
    • ソースきたないので
  • SNSから画像を検索して自動で写真を決定する機能
    • Like数などから月間で最も人気のある画像を取得してそれをアルバムにできるといい
  • レスポンシブ
    • 対応したつもりだったが、できてなかった

自問自答

  • これReactで作る意味あるのか
    • 今のところReactでなければ行けない理由はない
    • 今後機能追加していく段階で優位性がでるかもしれない
    • リアクト チョット ツカエル 状態になりたかった

感想

CSSつらい。めっちゃつらい。小さい子供がいると、まとまった時間を取ることが難しいので、細切れの時間を有効に使う事が重要。臨機応変に家事・子育てモードとプログラミングモードを切り替えることも重要で、家事育児の時間はフルコミットして、余裕がある時間帯に作業に戻る感じ。パートナーとの連携が必須。

WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用

WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用

広告を非表示にする