Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Regression and decision-tree

253 views

Published on

回帰と決定木からみる住宅価格

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

Regression and decision-tree

  1. 1. 回帰と決定⽊からみる 住宅価格 2018/04/07 ⿊⽊修弥
  2. 2. ⽬次 • ⾃⼰紹介 • 今⽇のゴール • Rのセットアップ • 基礎⽂法 • データ分析プロセスの概要 • データ獲得 • データ選択 • 前処理・変換 • データマイニング1:回帰 • データマイニング2:決定⽊ • まとめ 2
  3. 3. ⾃⼰紹介
  4. 4. 私の⾃⼰紹介 • 名前:⿊⽊ 修弥 • 興味関⼼のある分野:経済事象に対するデータ分析
 (次回は時系列データを扱おうかなと) • 趣味:スパイス、落語、深夜徘徊、データ分析 4
  5. 5. 皆様の⾃⼰紹介 • 名前 • プログラミング経験 • 統計や機械学習の経験
 
 #盛ったり、控えめに⾔ったりしないで下さい。 • 今回の講義・ワークで期待すること 5
  6. 6. 今回のゴール
  7. 7. 1. データ分析の⼀連のプロセスを体感すること 2. 「あ、データ分析って⾯⽩いな」って思うこと
  8. 8. スライドの表記ルール •    :実際に参加者に頭と⼿を動かしてもらうパート。 なるべくコピペでなく、⾃分の⼿で⼊⼒してください。 (写経の勧め)
 •    :重要な内容だが、データ分析プロセスの⼀連の 流れを体感して欲しいので、今回の講義では触れない。 講義後⼀⼈で読んでもわかるように丁寧に書いた(もの もあれば、概念だけ紹介してあとはググってください的に⼿抜きしたものもある) 8 実践 参考
  9. 9. Rのセットアップ
  10. 10. そもそもRとは • R⾔語はオープンソース・フリーソフトウェアの統計解析 向けのプログラミング⾔語及びその開発実⾏環境である。
 
 
 
 
 (出典:ウィキペディアです、⼿抜きですいません。
  使っていくうちに何するためのツールかは分かります。) 10
  11. 11. RとRStudioのインストール • RとRStudioをインストールしてください。
 インストール⽅法は、ググれば出てきますし、とても簡 単です。以下のサイトが特にわかりやすかったので、リ ンク載せておきます。 • https://qiita.com/daifuku_mochi2/items/ ad0b398e6affd0688c97 • 困ったことあれば、声かけてください。 11
  12. 12. Rの基礎⽂法
  13. 13. 変数編
  14. 14. 変数とは • データを記憶し必要な時に利⽤できるようにするため、 データに固有の名前を与えたもの。
 イメージとしては、データを⼊れる「箱」。 • 変数名を指定することで、いつでもデータを参照したり、 また、データを代⼊したりできる。 14 price 1000万円 (変数)
  15. 15. 変数の使い⽅ • 代⼊⽅法
 <-という記号を使って代⼊する
 例:a<-1000 • 参照⽅法
 変数名を⼊⼒する、もしくは、print(a)と⼊⼒する
 例:a # 1000と表⽰される
   print(a) # 1000と表⽰される 15 実践
  16. 16. 変数のデータ型 • 変数のデータ型
 変数には代⼊するデータの特性によって型が決められる。実数なら numeric型、整数ならinteger型、複素数ならcomplex型、⽂字列な らcharacter型、論理値(TRUEと FALSE)ならlogical型 • データ型を参照する⽅法
 mode(変数名)と⼊⼒する。
 例:price<-1000
 place<-“新宿”
 mode(price) # “numeric”と表⽰される
 mode(place) # “character”と表⽰される
 16 実践
  17. 17. 変数のデータ構造 • 複数のデータを扱うために、 変数にデータ構造を持たすこ とができる。 • データ構造の種類
 ベクトル、リスト、データフ レーム、因⼦、など…
 17 [2] 2000 [3] 1500 [1] 1000 priceベクトル
  18. 18. ベクトルの基本 • ベクトルのルール
 ベクトル内のデータは全て同じデータ型でないといけない • ベクトルの作り⽅
 c(値,値,...)で作れる。
 例:price<-c(1000,2000,1500)
 place<-c("新宿","池袋","品川") • ベクトルの参照⽅法
 ベクトル内での要素の順序を⾓括弧の[ ]で囲み、ベクトル名の後ろにつける。
 例:price[2] # 2000と表⽰される
 price[2:3] # 2000 1500と表⽰される
 price[-3] # 1000 2000と表⽰される(3番⽬以外を表⽰)
   price[c(TRUE,TRUE,FALSE)] # 1000 2000と表⽰される 18 実践
  19. 19. 特殊なベクトル 因⼦ • カテゴリ変数や順序変数を扱う時に使う • ラベルを定義し、それぞれの箱には数値を 格納することで、使⽤するメモリサイズが 減る。 • 扱い⽅
 > use<-factor(c("住宅","事務所","店 舗"))
 > use[1:2]
 [1] 住宅 事務所
 Levels: 事務所 住宅 店舗 19 [2] 3 [3] 2 [1] 1 use (1:住宅、2:事務所、3:店舗) [4] 2 実践
  20. 20. リストの基本 • 複数のデータを格納するという点でベクトルと似ているが、異なる型のデー タを格納できる点で異なる。 • リストの使い⽅
 > house<-list(place="新宿",price=1000,pet=TRUE)
 > house[1] # ベクトル同様番号で参照できる
 $place
 [1] "新宿"
 > house$place # $記号でも参照できる
 [1] “新宿"
 
 
 20 $price 1000 $pet TRUE $place 新宿 houseリスト 実践
  21. 21. データフレームの基本 • ベクトルとリスト両⽅の性質 を合わせもったデータ構造。 データ分析では、基本的に
 データフレームを使⽤する。 • 列のことを特徴量またはフィー チャーと呼ぶこともある。 21 新宿 1000 $place TRUE $price $pet 池袋 2000 TRUE 品川 1500 FALSE [1] [3] [2]
  22. 22. データフレームの基本 > df_house<-data.frame (place, price) 
 > # 必須ではないが、変数名の初めにデータの種類を識別できる⽂字をつけ ると便利
 
 > df_house$price # リストと同じように参照できる
 [1] 1000 1500 2000
 
 > df_house[1,2] # [⾏,列]で参照できる
 [1] 1000
 
 > df_house[1,] # ⾏全体を⾒たいときは列を空⽩にする
 place price
 1 新宿 1000 22 実践
  23. 23. 関数編
  24. 24. 関数とは • 値を与えると、何かしらの処理(計算)を⾏い、値を返却するも の。与える値を引数、返ってくる値を戻り値という。 • ⼀度関数で処理を定義してしまえば、同じ処理を何度も書かず に済む。 24 引数 関数 戻り値
  25. 25. 関数の使い⽅ • 関数は⾃分で定義することもできるが、よく使うような標準的な処理 は標準パッケージで⽤意してくれてある。 • 関数名(引数,引数,...)で関数を使⽤できる
 例:sum(price[1],price[2]) # 3000
 modori<-sum(price[1:2])# 3000という戻り値をmodoriに代⼊
 mean(price) # 1500
 plot(price) # 表が作図される
 他にもmax()/min()/unique()/median()/log()…など⼭ほどある • 関数の使⽤⽅法が⾒たいときは、?関数名でhelpが⾒れる。
 (英語だけど…) 25 実践
  26. 26. 標準パッケージ以外の関数を 使いたい場合 • パッケージとは、他のプログラムから呼び出して利⽤できるよ うに、部品化されたプログラムの集まり。 • install.packages(“パッケージ名”)でパッケージをインストー ルし、
 library(“パッケージ名”)でインストールしたパッケージを使え る状態にする。
 上記2つの処理をすることで、パッケージの中で定義されてい る関数が利⽤できるようになる。具体例は決定⽊の部分で紹介。 
 26
  27. 27. データ分析プロセス
  28. 28. データ分析プロセスの概要 KDD(Knowledge Discovery in Databases)のプロセス 1. データ獲得
 対象領域の性質を理解し、事前知識と必要なデータ、ならびにデータマイニングの⽬標を設定する。 2. データ選択
 データからマイニングに必要なものを選択する。 3. 前処理
 データからノイズや異常値を除去し、意図した分析が実施可能なデータにする。 4. 変換
 知識発⾒アルゴリズムを適⽤できるよにデータを変換する。属性⽣成や属性選択などの処理が含まれる。 5. データマイニング
 統計解析や機械学習などの分析⼿法を⽤いて、データから治験を発⾒する。 6. 解釈・評価
 抽出したパターンの解釈や評価を⾏って知識を得る。 28 福島真太郎『Useful R データ分析プロセス』p8参照
  29. 29. データ獲得
  30. 30. 今回使⽤するデータ • 国⼟交通省が提供している⼟地総合情報システム
 (http://www.land.mlit.go.jp/webland/servlet/MainServlet)より、 平成28年第2四半期から平成29年第2四半期までの
 不動産取引価格情報を⽤いる。 • ただし、今回は時間短縮のため、事前に下ごしらえした
 データを使⽤します。 30
  31. 31. データ準備⼿順1
 作業ディレクトリの作成 • 今回作業するためのディレクトリ(フォルダ)を
 どこでもいいのでローカルのどこかに作成してください。 31 実践
  32. 32. データ準備⼿順2
 データのダウンロード • https://github.com/ShuyaKuroki/data_analysis
 からデータを取得します。 • データの取得⽅法
 (1)gitを未インストールの場合
 右上の clone or download > Download ZIP でダウンロード
 ダウンロードしたdata_analysis-masterを作業ディレクトリに移動させる
 
 (2)gitをインストール済みの場合
 コマンドラインで作業ディレクトリ配下に移動し、
 以下のコマンドを⼊⼒
 git clone https://github.com/ShuyaKuroki/data_analysis.git
 
 32 実践
  33. 33. データ準備⼿順3
 作業ディレクトリへ移動 • Rstudioで作業ディレクトリ(est23.csvが含まれるディレクトリ)に移動。 • More>Set As Working Directory 33 実践
  34. 34. データ準備⼿順4
 データの読み込み 【読み込む】
 est23<-read.csv("est23.csv",header=TRUE,stringsAsFactors = FALSE,na.strings=(c("NA", "")))
 
 【補⾜】
 header:1⾏⽬がカラム名ならTRUEを指定する。
 
 stringsAsFactors:⽂字列を因⼦として読み込むか。前処理を⾏うのに 因⼦では処理しにくいので、FALSEを指定する。
 
 na.strings=(c("NA", “")):空⽩値をNAとして扱うことを指定する。
 34 実践
  35. 35. データマイニング の⽬標設定 【⽬標】
 取引価格を
 他の特徴量を⽤いて
 予測する。 35 変数名 意味 station_distance 最寄駅までの距離 total_price 取引価格 area ⾯積 next_use 次の⽤途 city_planning 都市計画 age 築年数 renovation_flg 売買前にリノベーションしたか number_of_floor 部屋の数 kitchen_level キッチンのレベル(R、K、DK、 LDK) service_room 納屋のあるなし
  36. 36. データ選択
  37. 37. まずはデータを観察する • データ観察に役に⽴つ関数⼀覧 str():簡潔に内容を表⽰ summary():要約を表⽰ View():データ全体を表⽰。データが⼤きいと処理に時間がかかる。 head():始めの数⾏だけ表⽰。head(est23,n=15)のように⾏数の指定ができる。 hist():ヒストグラムを描く。hist(est23$total_price,break=100)のようにセル数を指定できる。 unique():重複のないデータを取得する。どんなデータパターンがあるか⾒たいとき。 paris():変数同⼠の相関を視覚的に⾒る。 • データを⾒るときの注意 カラム別にデータを観察したいときは[データフレーム名]$[カラム名]でみれる。
 例:hist(est23$total_price) 37 実践
  38. 38. 不要なデータの削除 • 不要なデータを削除する処置は、時間短縮のため既に施してある。 • 今回削除したカラムの例
 市町村コード est23$city_code<-NULL
 ⼟地の形状  est23$land_shape<-NULL
 間⼝     est23$frontage<-NULL • 削除理由
 全てのデータで同じ値なため(市町村コード)
 説明したい値に対して明らかに関係がないため(連番)
 半分以上が⽋損値なため、有効な指標として使えないため(間⼝) 38 参考
  39. 39. 前処理・変換
  40. 40. データに既に前処理は施してあるので、今回は以下を⾏う。 • ⽋損と外れ値への対処法の紹介 • 特徴量エンジニアリングのアイデア出し 今回は紹介しないが、以下の前処理が必要な場合もある。 • データ単位を揃える正規化 • 連続データの離散化
  41. 41. ⽋損値とは • 名前の通り、⽋けているデータ。要はデータがない。 • データマイニングをするにあたって、⽋損値があるとう まく分析できないケースが多い。 • しかし、現実のデータは⼤抵何かしら⽋損がある。 41
  42. 42. ⽋損値への対処法 • まずは、⽋損値あるデータを観察する。
 (⽋損はランダムに発⽣しているとは限らない。) • 次に、どう対処するかを決める。⽅針としては以下の⼆つ A. ⽋損値を持つサンプルを削除する(リストワイズ法) B. ⽋損値を推定し、代⼊する(平均・回帰・最尤推定) 42
  43. 43. ⽋損値の対処⽅法(例) • ⽋損があるデータを⾒る
 >na_data<-est23[is.na(est23$floor_plan),]
 >summary(na_data)
 >#is.na()は空⽩ならTRUE、空⽩でなければFALSEを返す • ⽋損があるデータとないデータを⽐べる。
 (平均値で⽐べたり、plotで描画したり)
 > no_na_data<-est23[!is.na(est23$floor_plan),]
 > plot(na_data$total_price,col="blue",pch=2,ylim=c(0,1.5e+10))
 > par(new=T) # 上書き指定
 > plot(no_na_data$total_price,col=“red",pch=1,xlim=c(0,15000),ylim=c(0,1.5e+10))
 > # 間取り(floor_plan)がNAのデータは取引価格が⾼い傾向にある。
 > # 特別な間取りだから⾼いのか?そもそも住宅じゃないのか?などの仮説を⽴てながら、データを観察していく。 • ⽋損のあるデータを削除する
 est23<-est23[!is.na(est23$floor_plan),] 43
  44. 44. 外れ値の説明と今回の⽅針 • 外れ値とは、他の観測データと⽐べて著しく乖離したデータのこと。 • 外れ値が存在したまま分析すると、分析結果がデータ本来の性質とは異なる 結果になる可能性がある。
 (例えば、最も⾝近な平均値の指標である加重平均は、外れ値の影響を強く 受ける。代替指標としては、中央値やトリム平均が考えられる。) • しかし、外れ値をどのような基準で除外するのが妥当かは⾮常に難しい。 • 今回は外れ値を除外せずにモデルを作り上げ、外れ値の影響に関して考察す るスライドを⼊れている。 • (発展)次スライドに紹介するような外れ値除外⼿法を⾃宅で試してみて、 どのやり⽅が妥当か検証してみてください。 44
  45. 45. 外れ値の⾒つけ⽅ • 箱ひげ図を描きある分位点の
 外側を外れ値とする(boxplot)
 • 統計的な検定を⾏う(Smirnov-Grubbs検定) • データ間の距離を計算し、著しく離れていた場合外れ値 とする(k近傍法、lof法) 45 参考
  46. 46. 特徴量エンジニアリングとは 予測に役⽴つにように特徴量を変換・⽣成すること。 今回の例でいうと、 • 建築年
 元データ:昭和20年、平成15年などの⽂字列
 →加⼯後:建築されてから何年経っているかという数値データ • 間取り
 元データ:1LDK、2Kなどの⽂字列
 →加⼯後:部屋数という数値データ、キッチンのレベルという因 ⼦データ 46
  47. 47. 特徴量エンジニアリング
 を考えて⾒る • 今回の元データには実は最寄駅などの場所のデータも含 まれていた。 • もちろん最寄駅名からでは価格を予測させるのは不可能。 どのような⼯夫を施せば、予測に役⽴つ特徴量となるだ ろうか?
 ヒント的なもの:コンピュータに計算させるので
         数値に落とし込む必要がある。 47 実践
  48. 48. データマイニング0 事前説明
  49. 49. データマイニングの流れ 1. 学習データとテストデータの分割 2. データを説明するモデルを構築する 3. 構築したモデルを解釈する 4. モデルを使って予測する 5. 予測精度を検証する 6. パラメータチューニングや外れ値除去を⾏う 7. 2~6を繰り返し、予測精度と汎⽤性の⾼いモデルを作る 49
  50. 50. 学習データとテストデータの分割 • 学習データでモデルを作り、テストデータを使ってモデルの精度 を検証する。割合としては8:2くらいで分けることが多い。 • 以下のコードで学習データとテストデータに分割 > set.seed(123)
 > train_sample<-sample(11510,8000)
 > est23_train<-est23[train_sample,]
 > est23_test<-est23[-train_sample,]set.seed() 50 実践
  51. 51. データマイニング1 線形回帰
  52. 52. 統計の基本知識 • (算術)平均:和を個数で割ったもの • 分散:平均からのばらつき • 標準偏差:分散の平⽅根 • 共分散:2変数間の関係性 • 相関係数:2変数間の関係性 52 E(X) = N i=1(xi)/N V ar(X) = N i=1(xi − ¯x)2 /N − 1 sx = V ar(X) Cov(X, Y ) = N i=1(xi − ¯x)(yi − ¯y rxy = Cov(X, Y )/(N − 1)sxsy E(X) = N i=1(xi)/N V ar(X) = N i=1(xi − ¯x)2 /N − 1 sx = V ar(X) Cov(X, Y ) = N i=1(xi − ¯x)(yi − ¯y)/N − rxy = Cov(X, Y )/(N − 1)sxsy (−1 E(X) = N i=1(xi)/N V ar(X) = N i=1(xi − ¯x)2 /N − 1 sx = V ar(X) Cov(X, Y ) = N i=1(xi − ¯x)(yi − rxy = Cov(X, Y )/(N − 1)sxsy E(X) = N i=1(xi)/N V ar(X) = N i=1(xi − ¯x)2 /N − 1 sx = V ar(X) Cov(X, Y ) = N i=1(xi − ¯x)(yi − ¯y)/N − 1 rxy = Cov(X, Y )/(N − 1)sxsy (−1 ≤ rxy ≤ E(X) = N i=1(xi)/N V ar(X) = N i=1(xi − ¯x)2 /N − 1 sx = V ar(X) Cov(X, Y ) = N i=1(xi − ¯x)(yi − ¯y)/N rxy = Cov(X, Y )/(N − 1)sxsy (−1 ≤ rxy ≤ 1) E(X) = N i=1(xi)/N V ar(X) = N i=1(xi − ¯x)2 /N sx = V ar(X) Cov(X, Y ) = N i=1(xi − ¯x)(y rxy = Cov(X, Y )/(N − 1)sxs (−1 ≤ rxy ≤ 1)
  53. 53. 線形回帰とは 【定義】
 説明したい変数(被変数変数)Yと、 影響を与える変数(説明変数)Xの 関係を、直線に当てはめたもの。
 式は以下のようになる。
 Y=α+βX
 βのことを回帰係数と呼ぶ。
 
 【例】
 住宅データの例でいうと、
 Yが取引価格、Xが⾯積や部屋の数 などにあたる。 53 y(例:価格_単位千万円) 0 2 4 6 8 x(例:部屋数) 0 2 4 6 8
  54. 54. 単回帰と重回帰 • 単回帰:単純線形回帰の略。説明変数が単⼀のモデル。
 • 重回帰:多重線形回帰の略。説明変数が複数のモデル。 54
  55. 55. どのようにして 回帰係数(β)を求めるか 【基本⽅針】
 実際の値( )と、線形回帰モデルの推定値( )との差を残差とすると、
 全体の残差を最⼩にするαとβを求める。
 
 55 y(例:価格_単位千万円) 0 2 4 6 8 x(例:部屋数) 0 2 4 6 8 yi ˆyi (y1 ˆy1)2 + (y2 ˆy2)2 + · · · + (yi ˆyi)2 残差 e ˆy = ↵ + x 【残差平⽅和の数式】 ただし、
  56. 56. どのようにして 回帰係数(β)を求めるか 残差をαとβで偏微分して0とおき、その⽅程式を解けば、 残差を最⼩にするαとβが求められる。 残差の平⽅和の最⼩点を求める⽅法を「最⼩⼆乗法」という 重回帰も回帰係数が増えるだけで、基本⽅針は同じ。 (最⼩⼆乗法の⾯倒な計算はRがやってくれる) 56 ˆy = ↵ + 1x1 + 2x2 + · · · + ixi
  57. 57. Rでの回帰モデル構築⽅法 ># モデルの構築
 >model<- lm(dv~ev, data ) # dvは被説明変数、evは説明変数 ># 住宅データにおける実⾏例
 >m_lm <- lm(total_price ~ station_distance + area + next_use + city_planning + age + renovation_flg + number_of_floor + kitchen_level + service_room,data=est23_train)
 
 ># dataに含まれる変数の1つを被説明変数、残りを全て説明変数として扱いた い場合
 >m_lm_rya <- lm(total_price ~ . ,data=est23_train) # ドットで代⽤でき る 57 実践
  58. 58. 解釈・評価1 線形回帰
  59. 59. 回帰モデルの解釈 > summary(m_lm) Call:
 lm(formula = total_price ~ station_distance + area + next_use + city_planning + age + renovation_flg + number_of_floor + kitchen_level + service_room, data = est23_train) Residuals: Min 1Q Median 3Q Max 
 -469922877 -6636840 -995856 4919994 1330666943 Coefficients:
 Estimate Std. Error t value Pr(>|t|) (Intercept) 12576470 1275901 9.857 < 2e-16 *** station_distance -805193 54158 -14.867 < 2e-16 *** area  1165188 17596 66.220 < 2e-16 *** next_use事務所 3920091 1983995 1.976 0.048195 * next_use住宅 2447322 713819 3.428 0.000609 *** next_use店舗 -4666066 10581334 -0.441 0.659242 59 切⽚(α) 各変数が1単位増えた時に 住宅価格に与える影響(β) 各変数が被説明変数と 関係がある可能性。 可能性が⾼いと、*が多い 実践
  60. 60. 回帰モデルの解釈 > summary(m_lm) Call:
 lm(formula = total_price ~ station_distance + area + next_use + city_planning + age + renovation_flg + number_of_floor + kitchen_level + service_room, data = est23_train) Residuals: Min 1Q Median 3Q Max 
 -469922877 -6636840 -995856 4919994 1330666943 Coefficients:
 Estimate Std. Error t value Pr(>|t|) (Intercept) 12576470 1275901 9.857 < 2e-16 *** station_distance -805193 54158 -14.867 < 2e-16 *** area  1165188 17596 66.220 < 2e-16 *** next_use事務所 3920091 1983995 1.976 0.048195 * next_use住宅 2447322 713819 3.428 0.000609 *** next_use店舗 -4666066 10581334 -0.441 0.659242 60 なにこれ?? 実践
  61. 61. 線形回帰では因⼦型変数を
 どうモデル化しているか 以下の2つの⼿順を経てモデル化している 1. 因⼦型の変数を0か1かの値をとる変数(ダミー変数)に分割する
 例:next_use={事務所,住宅,店舗,その他}
   →next_use事務所={0,1},next_use住宅={0,1},
    next_use店舗{0,1},next_useその他={0,1} 2. 1つダミー変数を基準として、他のダミー変数はその基準と⽐べ て、どの程度被説明変数に対して影響度があるかを計算する
 例:next_useその他と⽐べて、next_use事務所の場合は3920091 円上がる。next_use住宅の場合は2447322円上がる。next_use 店舗の場合は、4666066円下がる。 61
  62. 62. モデルの当てはまりの良さを 知る⽅法 モデルの当てはまりの良さを知る際に、
 参考になるのは以下の3つ (1)決定係数 (2)残差 (3)診断図 62
  63. 63. (1)決定係数:定義 モデルが被説明変数の値をどれだけ説明できているか、を表す指標。
 0から1の値をとり、1に近いほどよく説明できている。 
 > summary(m_lm) Call: lm(formula = total_price ~ ., data = est23) (中略) --- Signif. codes: 0 ʻ***ʼ 0.001 ʻ**ʼ 0.01 ʻ*ʼ 0.05 ʻ.ʼ 0.1 ʻ ʼ 1 Residual standard error: 21090000 on 11485 degrees of freedom Multiple R-squared: 0.5708, Adjusted R-squared: 0.5695 F-statistic: 442 on 24 and 7975 DF, p-value: < 2.2e-16 63 左が決定係数、右が⾃由度調整済み決定係数。 モデルが複雑になる(説明変数が多くなる)と、 決定係数は必然的に⾼まる。 モデルの複雑さにペナルティを与えて、 決定係数を調整することを「⾃由度調整」という。
  64. 64. (1)決定係数:イメージ 決定係数=総変動のうち、回帰モデルで説明できた変動の割合。y(例:価格_単位千万円) 0 2 4 6 8 0 2 4 6 8 平均値 回帰モデル:y=α+βx 総変動 回帰モデルで 説明できなかった変動 (残差) 回帰モデルで 説明できた変動
  65. 65. (2)残差 【定義】
 回帰モデルで説明できなかった変動のこと
 
 【残差の⾒⽅】
 ># グラフで⾒る
 >hist(m_lm$residuals,breaks=100) ># 数値で⾒る
 > summary(m_lm$residuals) Min. 1st Qu. Median Mean 3rd Qu. Max. -423400000 -6552000 -919600 0 4700000 567800000 65 0付近に偏っているが まれに残差がバカでかい (⼤外ししている)データがある。
  66. 66. (3)診断図 • Residuals vs Fitted:予測と実際の乖離を描画したもの • NormalQ-Q:残差の正規性を確認できる。正規確率プ ロットとも呼ぶ。 • Scale-Location:予測値と残差の⼤きさの関係性を描画 したもの。 • Residuals vs Leverage:モデル構築に影響⼒のあるデー タを探すのに役⽴つ。 66 参考
  67. 67. Residuals vs Fitted 67 横軸 回帰モデルによる予測値 縦軸 残差e(予測値と実際の乖離) 読み取れ ること 残差が0付近で均⼀分散していれば、うまく モデルで説明できている。
 ⽬的変数の値が⼤きなるほど残差が⼤きいな どの傾向が⾒られる場合は、 考慮できていない特徴量がある、もしくは、 単回帰・重回帰の関数形では説明できない可 能性がある。(⼀般化線形モデルへ) 参考
  68. 68. Normal Q-Q 68 横軸 z値 (回帰モデルによる予測値を標準化したも の) 縦軸 標準化残差 (残差をその標準偏差で割ったもの) 読み取れ ること 残差が正規分布に従っているなら、切⽚0・ 傾き1の直線上にプロットされるはず。 今回の例では、
 外れ値は明らかに直線から外れていること、 住宅価格が⼤きくなるほど直線から外れるこ とが分かる。 参考
  69. 69. Scale-Location 69 横軸 回帰モデルによる予測値 縦軸 標準化残差の絶対値の平⽅根 読み取れ ること 予測値と残差の変動状況を考察するために 使⽤する。均等⽔平線が引かれ、その周りに 点がランダムに散布していると、モデルの当 てはまりが良いと考えられる。 今回は、予測値が⼤きくなるほど残差が⼤き くなっているので、当てはまりは悪い。 参考
  70. 70. Residuals vs Leverage 70 横軸 作⽤点(梃⼦値) 縦軸 標準化残差 読み取れ ること 横軸はX⽅向の外れ値、縦軸はY⽅向の外れ 値と読み替えることができる。 ⾚線でクックの距離0.5を表している。 クックの距離0.5を超えると外れ値として扱 われる。 参考
  71. 71. 回帰モデルによる予測 ># 基本形
 >prediction<-predict(model, testdata) ># 住宅データでの使⽤例
 >p_total_price_lm<-predict(m_lm, est23_test) 71 実践
  72. 72. 予測精度の検証 ># ⽅法0:とりあえず描画
 ># x軸に予測値、y軸に実際の値をプロット
 >plot(p_total_price_lm,y=est23_test$total_price) ># ⽅法1:平均絶対誤差
 >mean(abs(p_total_price_lm - est23_test$total_price))
 [1] 9218452
 ># 参考までに
 >mean(est23_test$total_price)
 [1] 34879145
 ># 平均3億5千万円のデータに対して、平均900万円ほどの誤差で予測できている ># ⽅法2:相関係数
 >cor(p_total_price_lm,est23_test$total_price)
 [1] 0.6524735 72 実践
  73. 73. 予測精度を上げる⽅法 A. モデルに対するアプローチ • 説明変数を増やしたり、減らしたりする
 (変数選択はAICという基準で選択する⽅法がある) • 説明変数に相互作⽤項を追加する
 (*や:という記号を使うことで、組み合わせによる影響を考慮できる) • 被説明変数や説明変数を変換する(対数変換など) B. データに対するアプローチ • 外れ値を除去する 73 参考
  74. 74. • 10分休憩。 • 次は決定⽊から始めるので、
 その間のスライドは眺める⽤。
  75. 75. 線形回帰を実⾏する上での注意点 A. 残差は正規分布に従う。 B. 説明変数同⼠で強い相関があってはいけない。 75 参考
  76. 76. A.残差の分布に関して • 線形回帰の式を正しく書くと
 Y=α+βX+e
 (残差eは平均0、分散σ^2の正規分布に従う) • 計算結果が上記の仮定に反している場合は、
 不⾜している説明変数がある、もしくは、線形回帰では うまく説明できていない、ということになる。 • 被説明変数の分布が正規分布から⼤きく外れている場合 は、⼀般化線形モデルの適⽤を検討した⽅が良い。 76 参考
  77. 77. B.説明変数間での強い相関に関して • 強い相関の例:降⽔量と天気、駅からの距離と徒歩時間 • 問題点:回帰係数が解析不可能だったり、解析できたと しても、信頼できない数値が算出される。 • 対処法:強い相関がある変数はどれか⼀つに絞る。
 (「強い」の基準は難しいが、
 少なくとも0.7より⼤きければ、外した⽅がいい) 興味のある⼈は、「多重共線性」で調べて⾒てください 77 参考
  78. 78. データマイニング2 決定⽊・回帰⽊
  79. 79. 決定⽊とは 【概要】
 データの純度を⾼める分割条件 を⾒出す⼿法。 【由来】
 意思決定の際に使われることと
 モデルの形状から。 【例】
 右の図はタイタニック号の⽣存デー タを決定⽊でモデリングしたもの 根ノード 終端ノード
  80. 80. どのようにして分割条件を⾒出すか 基本⽅針:
 分割することで、データのごちゃ混ぜ度合い(不純度)が減ることを⽬指す。
 ごちゃ混ぜ度合いを⼤きく減らせることを、情報利得が⼤きいという。 情報利得:
 (分割前のノードにおける不純度)ー(分割後のノードにおける不純度) 80 【情報利得⼩さい】 【情報利得⼤きい】 p N(tp) l N(tp) r = 0.66 − {0.33 + 0.33} = 0 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 I(tr) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0.33} = 0 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr I(tl) = 1 − {(3 ) + (3 ) + (3 ) } = 0.66 I(tr) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0.33} = 0 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0.33} = 0 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 I(tr) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0.33} = 0 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr I(tl) = 1 − {(3 ) + (3 ) I(tr) = 1 − {(1 3 )2 + (1 3 )2 = I(tp) − { N( N( = 0.66 − {0.33 + = 0 I(tp) = 1 − {(2 6 )2 + (2 6 )2 I(tl) = 1 − {(2 4 )2 + (2 4 )2 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N( N( = 0.66 − {0.33 + = 0.33 a tp tl tr
  81. 81. 不純度の求め⽅ 【数式】
 【説明】
 ノードに1つのクラスしか含まれない場合は0となり、
 ノードのサンプルが全て異なるクラスに含まれる場合は1に近い値となる。 【補⾜】
 不純度にはジニ係数やエントロピーを使う⽅法があるが、
 今回はジニ係数を⽤いた求め⽅を紹介 81 aa t I(t) t i Ni(t) I(t) = 1 − {(N1(t) N(t) )2 + (N2(t) N(t) )2 + · · · + (Ni(t) N(t) )2 } I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 I(tr) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66
  82. 82. 情報利得と不純度の計算例 82 【情報利得⼩さい】 【情報利得⼤きい】 aa t I(t) t i Ni(t) I(t) = 1 − {(N1(t) N(t) )2 + (N2(t) N(t) )2 + · · · + (Ni(t) N(t) )2 } I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 I(tr) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0.33} = 0 t I(t) t i Ni(t) I(t) = 1 − {(N1(t) N(t) )2 + (N2(t) N(t) )2 + · · · + (Ni(t) N(t) ) I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 I(tr) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0.33} = 0 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 2 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr 1 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr 1 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr 1 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr 1 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(2 4 )2 + (2 4 )2 } = 0.5 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N(tl) N(tp) I(tl)+ N(tr) N(tp) I(tr)} = 0.66 − {0.33 + 0} = 0.33 a tp tl tr 1 I(tl) = 1 − {(2 4 )2 + (2 4 )2 I(tr) = 1 − {(2 2 )2 } = 0 = I(tp) − { N( N( = 0.66 − {0.33 + = 0.33 a tp tl tr
  83. 83. 決定⽊で陥りやすい罠 【決定⽊の問題点】
 分割条件を増やしすぎると学習 データはうまく分けられるが、 学習データ以外のデータでは効 果をなさないモデルになる恐れ がある。 【解決⽅法】
 不必要な分割条件を削る「刈り 込み」という操作を⾏う。
  84. 84. どのような基準で刈り込むか 【基本⽅針】
 「誤り率」と「⽊の⼤きさ」の和をコストとみなし、
 コストが最⼩になるように⽊を刈り込む。
 そうすることで、適度な⼤きさの決定⽊を作成できる。 【コスト】
 (誤分類したデータの割合) + (cp)×(終端ノードの数) cpはcomplexity parameterの略。
 どの程度⽊を複雑にするかを左右するパラメータで、⾃分で調整可能。 0.01程度が良く採⽤される。
 cpを⼩さくするほど、⽊を複雑にすることに対して寛容になる。 84
  85. 85. 決定⽊まとめ • 最も不純度を減らせる、つまり、情報利得が最⼤となる 分割条件を探すという⾏為を繰り返す。 • 誤分類率と⽊の⼤きさから算出されるコストが⼩さくな るように、最終的な⽊のサイズを決める。 【補⾜】
 どのように分割した時に情報利得が最⼤になるか、
 どの程度の⼤きさで決定⽊のコストが最⼩になるか、
 など煩わしい計算はRがやってくれます。 85
  86. 86. 予測したいデータが
 数値の場合はどうするのか?
  87. 87. 決定⽊と回帰⽊ 87 決定⽊ 回帰⽊ 被説明変数 カテゴリ
 (例:晴れ・曇り・⾬) 数値 (例:降⽔量) 基本⽅針 不純度が⼩さくなるように分割する 不純度 ジニ係数 平均からの距離 (分散や標準偏差) 不純度の数式 
 iはクラス番号 
 kはデータ番号 予測値 カテゴリ 終端ノードの データの平均値 aa t I(t) t i Ni(t) I(t) = 1 − {(N1(t) N(t) )2 + (N2(t) N(t) )2 + · · · + (Ni(t) N(t) )2 } 1 − (Ni(t) N(t) )2 1 N(t) (yi − ¯yi)2 aa t I(t) t i N I(t) = 1 − {(N1(t) N(t) )2 + (N2(t) N(t) )2 1 − (Ni(t) N(t) )2 1 N(t) (yk − ¯yk)2 I(tp) = 1 − {(2 6 )2 + (2 6 )2 + (2 6 )2 } = 0.66 I(tl) = 1 − {(1 3 )2 + (1 3 )2 + (1 3 )2 } = 0.66
  88. 88. 回帰⽊における 不純度のイメージ 88 y(例:価格_単位千万円) 0 2.25 4.5 6.75 9 x(例:部屋数) 0 2 4 6 8 左ノードの平均 右ノードの平均 分割 ⽮印の⻑さの和が ⼤きいほど、 不純度も⼤きい
  89. 89. 回帰⽊における 不純度のイメージ 89 y(例:価格_単位千万円) 0 2.25 4.5 6.75 9 x(例:部屋数) 0 2 4 6 8 左ノードの平均 右ノードの平均 分割 バカな分割をすると 不純度が⼤きくなる
  90. 90. Rでの決定⽊・回帰⽊構築⽅法 ># 基本形
 >m <- rpart(dv~ev, data, method, control,…) #dvは被説明変数、evは説明変数
 
 ># 住宅データでの使⽤例
 >install.packages(“rpart”) # パッケージをインストール
 >library(rpart) # インストールしたパッケージを使える状態にする
 >m_rpart<-rpart(total_price~.,data=est23_train) # m_rpart変数に構築した 回帰⽊を代⼊ ># 引数の説明
 ・method:クラスへの分類問題ならclass、連続値で回帰⽊をつかたい場合はanovaを 指定。しかし、指定しなくても、勝⼿にデータを解釈して設定してくれる。 ・control:パラメータチューニング時に使⽤。詳細は後述。 90 実践
  91. 91. 解釈・評価2 決定⽊・回帰⽊
  92. 92. 決定⽊・回帰⽊の解釈 # 構築されたモデルを⾒る
 > print(m_rpart) # m_rpart と⼊⼒するだけでも可 n= 8000 node), split, n, deviance, yval * denotes terminal node 1) root 8000 5.730641e+18 34827350 2) area< 57.5 5378 9.911319e+17 25237040 4) area< 32.5 3203 1.722265e+17 19269090 8) age>=21.5 982 3.886630e+16 12355700 * 9) age< 21.5 2221 6.567371e+16 22325800 * 92 終端ノードを⽰す そのノードの平均値 実践
  93. 93. 決定⽊・回帰⽊の解釈 ># 描画する
 >install.packages(“rpart.plot”) # パッケージをインストール
 >rpart.plot(model,type,extra,) # パッケージを使える状態にする
 >rpart.plot(m_rpart) 93 rpart.plotの良く使う引数 引数 オプション type ノードラベルと分割情報のラベルの表⽰をコントロールする。 0: ノードに分割ラベルをつける(デフォルト) 1: 分割ラベルを上、ノードラベルを下に付ける。 2: ノードラベルを上、分割ラベルを下に付ける。 3: 枝に分割ラベルを付け、ノードにはラベルを付けない。 4: 3の結果にノードラベルを付ける。 extra ノードに情報を表⽰する。 0: 何の情報も表⽰しない。 1: ノードに含まれる個体数を表⽰する。 2: 正しく分類された⽐率を分数で⽰す。 3: 誤分類された⽐を⽰す。 4: クラス内の確率を⽰す。 5: クラス内の確率のみを⽰す cex ⽂字のサイズをコントロールする。デフォルトはcex=1 『[連載] フリーソフトによるデータ解析・マイニング 第19回』を参考に表を作成
 https://www1.doshisha.ac.jp/~mjin/R/Chap_19/19.html 実践
  94. 94. 決定⽊・回帰⽊による予測 ># 基本形
 >predict(model,test) ># 住宅データでの使⽤例
 >p_total_price_rpart<-predict(m_rpart,est23_test) 94 実践
  95. 95. 予測精度の検証 ># ⽅法0:とりあえず描画
 ># x軸に予測値、y軸に実際の値をプロット
 >plot(p_total_price_rpart,y=est23_test$total_price) ># ⽅法1:平均絶対誤差
 >mean(abs(p_total_price_rpart - est23_test$total_price))
 [1] 10217137
 ># 参考までに
 >mean(est23_test$total_price)
 [1] 34879145
 ># 平均3億5千万円のデータに対して、平均1千万円ほどの誤差で予測できている ># ⽅法2:相関係数
 >cor(p_total_price_rpart,est23_test$total_price)
 [1] 0.6213578 95 実践
  96. 96. 予測精度を上げるためには • モデルを構築する際の引数を⾊々といじってみる
 (↑パラメータチューニングと呼ぶ) • 決定⽊・回帰⽊の場合は、
 どの程度まで⽊を⼤きくするかが肝となってくる 96 参考
  97. 97. 決定⽊・回帰⽊の パラメータチューニング 97 rpart.controlの良く使う引数 引数 オプション minsplit ノードにおける最⼩数の個体数
 デフォルトは20 minbucket 終端ノードにおける最⼩数の個体数
 デフォルトはminsplit÷3 cp complexity parameterの略。複雑度の許容度。⽊の⽣⻑をコントロールする。
 デフォルトは0.01   maxdepth ⽊の深さの最⼤数
 デフォルトは30 xval 交差確認の数
 デフォルトは10 『[連載] フリーソフトによるデータ解析・マイニング 第19回』を参考に表を作成
 https://www1.doshisha.ac.jp/~mjin/R/Chap_19/19.html 参考
  98. 98. 決定⽊・回帰⽊の パラメータチューニング(例) ># まずは⽊を⼤きくさせてみる。
 ># cpを⼩さくすれば、複雑さ(⼤きさ)に対して寛容になる
 >m_rpart_2<-rpart(total_price~.,data=est23_train,cp=0.001) ># ⽊の⼤きさ、cp、誤り率の関係性を観察する
 >printcp(m_rpart_2)
 Regression tree:
 rpart(formula = total_price ~ ., data = est23_train, cp = 0.001)
 Variables actually used in tree construction:
 [1] age area city_planning number_of_floor renovation_flg station_distance
 Root node error: 5.7306e+18/8000 = 7.1633e+14 n= 8000 
 CP nsplit rel error xerror xstd 1 0.2633542 0 1.00000 1.00006 0.115443
 2 0.1107703 1 0.73665 0.73686 0.107018
 3 0.0492227 2 0.62588 0.65456 0.097965
 4 0.0320201 3 0.57665 0.60314 0.097712 98 参考
  99. 99. 決定⽊・回帰⽊の パラメータチューニング(例) ># ⽊の⼤きさ、cp、誤り率の関係性を観察する
 ># 数値だけでは分かりにくいので図⽰
 > printcp(m_rpart_2) ># ⾚丸で囲んだあたりのcpを設定してみる
 >m_rpart_3<-rpart(total_price~.,data=est23_train,cp=0.0018) ># 予測精度を検証
 > p_total_price_rpart_3<-predict(m_rpart_3, est23_test)
 > mean(abs(p_total_price_rpart_3 - est23_test$total_price))
 [1] 9380502
 # デフォルトでは10217137だったので、少し精度が上がった。 【1標準偏差ルール】
 決定⽊では、cp の設定基準として、誤り率の最⼩値とその点の標準偏差を加えた値を超えない最⼤のcpを設定す るという慣例がある。
 ただし、回帰⽊では、誤り値の標準偏差は⼤きくなる傾向があるので、あまり参考にならない。 99 参考
  100. 100. 外れ値が回帰⽊に与える影響 影響の⼤きい要素から順番に分割するため、
 前にどの要素で分割したかが、次の分割に影響する。
 そのため、外れ値によって全く違ったモデルが作られる。 100 y(例:価格_単位千万円) 0 2.25 4.5 6.75 9 x(例:部屋数) 0 2 4 6 8 分割 y(例:価格_単位千万円) 0 7.5 15 22.5 30 x(例:部屋数) 0 2 4 6 8 分割 外れ値なし 外れ値あり
  101. 101. 今回紹介しきれなかったテーマ • ggplot:⾮常に⾒やすい図を描ける描画ライブラリ。 • モデル⽊:回帰⽊を適⽤後、各終端ノードで線形回帰を⾏う。 (今回紹介した知識を理解していれば簡単です) • バギング:複数の識別器を組み合わせる⼿法。アダブースト やランダムフォレストなどが知られている。今回紹介した⼿ 法に⽐べて、外れ値の影響受けにくい。
 700万程度の平均絶対誤差まで抑えられた。 • 空間相関:地理情報を記述できる(難易度⾼めです) 101
  102. 102. 参考⽂献 • データ分析プロセス『⾦明哲』 • 蓑⾕千凰彦『回帰診断』 • BrettLantz(訳:⻑尾⾼弘)『Rによる機械学習』 • 平井有三『はじめてのパターン認識』 • 『[連載] フリーソフトによるデータ解析・マイニング 第19回』
 https://www1.doshisha.ac.jp/~mjin/R/Chap_19/19.html • 間瀬茂『R基本統計関数マニュアル』
 https://cran.r-project.org/doc/contrib/manuals-jp/Mase-Rstatman.pdf 102

×