Sep 7 2016

R 軟體: xgboost + iris 資料範例

最近在 Kaggle 網站很紅的 xgboost 分類技術,在網路上居然找不到簡單易懂的 R + xgboost + iris 資料檔的範例

多數的人提供的範例都寫得亂七八糟、慘不忍睹,需要再額外花不少時間去理解跟改寫。我常常覺得不少 IT 背景的人在寫 document 或做範例時,經常把簡單的東西搞得非常複雜,大概是認為只要他們自己看得懂即可

所以我整理了以下這個例子,有興趣的朋友們可以 copy 去使用

?View Code LANGUAGE
library(xgboost)
iris2 = iris
# 增加一個 factor 變數當作解釋變數, 否則 iris 資料檔的
# 解釋變數都是數值變數, 不符合實務上常見的資料形態
iris2$id = factor(sample(c("A","B"),150,replace=T))
library(Matrix)
# 把所有解釋變數都轉為矩陣型態
xdata = sparse.model.matrix(Species ~ .-1, data = iris2)
# Species 分類數目
m = nlevels(iris2$Species)
# 把目標變數 Species 三個分類轉成 0,1,2. 必須從 0 開始
Y = as.integer(iris2$Species) - 1
set.seed(12345)
# xgboost 參數設定
param = list("objective" = "multi:softprob",
"eval_metric" = "mlogloss",
"num_class" = m
)
result = xgboost(param=param, data=xdata, label=Y, nrounds=20)
# 計算預測值
Ypred = predict(result,xdata)
Ypred = t(matrix(Ypred,m,length(Ypred)/m))
# colnames(Ypred) = levels(iris2$Species)
Ypred = levels(iris2$Species)[max.col(Ypred)]
# 混淆矩陣
t0 = table(iris2$Species,Ypred)
t0
# 預測正確率
sum(diag(t0))/sum(t0)
# 解釋變數重要性
imp = xgb.importance(names(iris2[,-5]),model=result)
print(imp)
library(Ckmeans.1d.dp)
xgb.plot.importance(imp)
library(DiagrammeR)
xgb.plot.tree(feature_names=names(iris[,-5]),model=result, n_first_tree=2)
?View Code LANGUAGE
library(xgboost)iris2 = iris# 增加一個 factor 變數當作解釋變數, 否則 iris 資料檔的# 解釋變數都是數值變數, 不符合實務上常見的資料形態iris2$id = factor(sample(c("A","B"),150,replace=T))library(Matrix)# 把所有解釋變數都轉為矩陣型態xdata = sparse.model.matrix(Species ~ .-1, data = iris2)# Species 分類數目m = nlevels(iris2$Species)# 把目標變數 Species 三個分類轉成 0,1,2. 必須從 0 開始Y = as.integer(iris2$Species) - 1set.seed(12345) # xgboost 參數設定param = list("objective" = "multi:softprob", "eval_metric" = "mlogloss", "num_class" = m)result = xgboost(param=param, data=xdata, label=Y, nrounds=20)# 計算預測值Ypred = predict(result,xdata)Ypred = t(matrix(Ypred,m,length(Ypred)/m))# colnames(Ypred) = levels(iris2$Species)Ypred = levels(iris2$Species)[max.col(Ypred)]# 混淆矩陣t0 = table(iris2$Species,Ypred)t0# 預測正確率sum(diag(t0))/sum(t0)# 解釋變數重要性imp = xgb.importance(names(iris2[,-5]),model=result)print(imp)library(Ckmeans.1d.dp)xgb.plot.importance(imp)library(DiagrammeR)xgb.plot.tree(feature_names=names(iris[,-5]),model=result, n_first_tree=2)

Apr 20 2014

統計電腦應用程式練習題

資料檔: babies
http://netstat.stat.tku.edu.tw/show_samples.php#c_babies
資料檔: cancer
http://netstat.stat.tku.edu.tw/show_samples.php#c_cancer
0. 請下載 babies.csv, 並在程式中讀入, 儲存成 babies 資料框架變數
1. 請用 babies 資料檔做一個一因子(One-Way)設計分析
2. 請用兩種不同方法將 bwt 變數依照 Q1, Q2, Q3 為切割點,轉碼成 B1, B2, B3, B4 分類變數
3. 請將 cancer.csv 資料檔讀入 R, 並分別使用 stack 與 unstack 做資料轉換
(1) stack 處理後儲存成 cancer2
(2) 用 unstack 把 cancer2 轉成 cancer3

Jan 6 2014

統計計算補充講義

http://steve-chen.net/R/stcmp.zip (需密碼)

http://steve-chen.net/R/package.zip (需密碼)


Jun 14 2013

時間數列期末報告:各組最佳模型比較

以下模型均採用台北市流浪狗資料,期數 123 期(至 2013/03)

註:模型之好壞還得視殘差分析結果、以及預測能力而定

     Models                         AIC         BIC
ARIMA( 0 , 1 , 1 )x( 1 , 1 , 1 )  1478.682*   1489.931*
ARIMA( 0 , 1 , 1 )x( 0 , 1 , 1 )  1484.456    1492.892*
ARIMA( 0 , 1 , 1 )x( 2 , 1 , 1 )  1479.357*   1493.418
ARIMA( 1 , 1 , 0 )x( 0 , 1 , 1 )  1491.690    1500.127
ARIMA( 1 , 1 , 0 )x( 3 , 1 , 1 )  1483.222    1500.095
ARIMA( 2 , 1 , 1 )x( 0 , 1 , 1 )  1479.357    1493.418
ARIMA( 2 , 1 , 1 )x( 1 , 1 , 0 )  1488.721    1502.782
ARIMA( 2 , 1 , 2 )x( 2 , 1 , 2 )  1485.458    1510.768
ARIMA( 3 , 1 , 0 )x( 2 , 1 , 1 )  1478.870    1498.556
ARIMA( 3 , 1 , 3 )x( 2 , 1 , 2 )  1479.871    1510.805
ARIMA( 4 , 1 , 2 )x( 2 , 1 , 2 )  1481.293    1512.227
ARIMA( 4 , 1 , 2 )x( 2 , 1 , 1 )  1479.315    1507.437
ARIMA( 5 , 1 , 2 )x( 1 , 1 , 1 )  1479.315    1507.437

介入模式:
ARIMA( 0 , 1 , 1 )x( 1 , 1 , 1 )* 1472.350**  1486.409**

此模型是 ARIMA(0,1,1)x(1,1,1) + 97年1月開始的 Step function 介入模式
介入模式的R 程式碼:

X1 = rep(0,length(Z))  # 製造出 123 個 0
X1[61:length(Z)] = 1   # 第 61 期(97/01)開始到最後改成 1

fit2 = arima(Z,order=c(0,1,1),seasonal=list(order=c(1,1,1),12),xreg=X1)
fit2
k = 1+2+1+1 # MA(1)+SAR(1)+SMA(1)+w0+sigma
bic = -2*fit2$loglik+k*log(length(Z))
bic

Dec 26 2011

SAS 期末上機考範例

1 . 請下載 iris data , 並讀入 SAS, data set 名稱為 iris, 變數名稱依序為 SL, SW, PL, PW, species

2. 請使用 SAS 方法與 PROC SQL 方法將整組 data set 依照 species 切割成 3 份新的 data sets,名稱各為 setosa, versicolor, virginica

3. 請使用 SAS 方法與 PROC SQL 方法將 2. 的 3 組 data set 合併成新的 data set,名稱為 iris2

4. 請自行創造一筆新資料,各以 SAS 方法及 PROC SQL 方法增加到 iris2 資料集中


Oct 24 2011

SAS 考古題

 請從以下網頁下載資料檔

http://steve-chen.net/sas/iris.txt

資料檔內的變數及位置如下:

x1 : 第 1 格~ 第 3 格

x2:第 4 格 ~ 第 6 格

x3:第 7 格 ~ 第 9 格

剩下兩個變數為 x4 跟 species

(1) 請使用「至少」兩種輸入法來讀入資料,並僅從第 4 列讀到第 110 列

(2) 請依照 x2 然後 x3 的順序從小到大排序,並使用 PUT 指令,將所有變數內容及 FIRST.x2 , LAST.x2 , FIRST.x3 , LAST.x3 , 及 INFILE 尾端所指定的 COLUMN 變數內容寫到 LOG 視窗


May 26 2011

進學班 R 軟體期末上機考考古題

1. 有 10 個資料檔,名稱分別為 d001.txt, d002.txt, … d010.txt, 資料檔裡面都有相同的兩個變數 IQ 與 scores。請用迴圈方式讀入 R 程式,每個資料檔畫出一個 IQ vs. scores vs.  的 X-Y 散佈圖

2. 請用 R 程式作出 t 分配(自由度 30, 31, …, 48,49, 50) 的查表表格(請參考一般統計學後面 t 分配表格的格式與配置)

3. 請將 2 寫成一個 function,function 中必須有內部的 function,function 的參數也必須有預設值

4. 請畫出 beta(1.0,0.5) 分配的機率密度圖 (可用 plot 函數或 Chapter 12 中的 curve 函數來畫)


Nov 9 2010

「R軟體:應用統計方法」修訂版

我寫的「R軟體:應用統計方法」由於第一版存貨已經賣完,目前修訂版已經出版了,有興趣的朋友們,可以在各網路書店買到,例如 博客來書局網頁

這次修訂版僅是微幅修正一些打字排版錯誤之處,實際內容跟初版相差極小,但東華書局重新幫我設計了封面、並重新排版。其實我還是比較喜歡第一版的封面,因為是我自己設計的 🙂

之前購買第一版的朋友們,麻煩下載以下的堪誤表 ( 此檔副檔名為 .docx,若下載後變成 .zip 檔,請直接更改為 .docx ):

http://steve-chen.net/wp-content/uploads/2010/11/correction.docx

很感謝大家對這本書的支持,也對書局那邊往往無法及時供貨在此道歉。我會盡量請東華書局那邊出書能夠更為順暢。


Jul 1 2010

期末收到的幾封 emails

每個學期末的期末考完之後,我都會收到一堆關於成績問題的 emails。這些類似的 emails 每年每個學期都會出現,我想藉這篇文章來談談這些問題。

Continue reading


Jun 11 2010

R 軟體上機考考古題

1.
請下載 R 軟體安裝好,並到
http://netstat.stat.tku.edu.tw
頂端選單點選 Samples 網頁,選取「類別資料」項目下的 video 資料檔,並從該資料檔「View data」網頁下載該組資料的 CSV 檔

2.
請寫一個 R 程式,滿足以下要求:

(1)將資料讀入 R 程式,並存成名為 X 的 data-frame 變數
(2)對資料作基本敘述統計分析。基本敘述統計分析部分需寫成 function
(3)至少包含 4 個不同的圖形
(4)至少使用回歸分析 或 ANOVA 分析其中一種
(5)程式裡面需包含迴圈(Loop) 與邏輯判斷 (if 或 switch) 部分


Apr 23 2010

R軟體:基本統計分析快速入門

以下  pdf 文件 「R軟體:基本統計分析快速入門」,主要是寫給尚未學習 R軟體,但想快速了解 R軟體 處理基本統計分析概貌與簡單範例的讀者。若要更進階學習 R 軟體,讀者仍請參考 R 軟體網站上的文件。

文件總共 9 頁,包含:

(1) 外部資料檔的輸入

(2) 基本敘述統計

(3) 基本統計圖形

(4) 基本檢定步驟:t 檢定, p  檢定, 卡方檢定

(5) 簡單相關, 簡單線性迴歸分析, 複迴歸分析

(6) 變異數分析:一因子設計, 二因子設計

等等基本操作與步驟。

pdf 檔下載 (請按滑鼠右鍵「另存目標」)

範例資料檔下載


Apr 22 2010

扭曲的台灣教育價值觀

前陣子,我受邀去某頂尖明星高中擔任他們大學學測甄試演練的提問者。到場的高三學生個個的自我介紹文件洋洋灑灑,不是鋼琴多少級的資格,就是曾到國外遊學半年至一年,也因此使用英文自我介紹時,其中還些人帶有道地的英國腔或美國腔。這些學生們的家庭背景,也多半是中上階層,頗為印證了幾年前中研院學者所曾經做過的調查「台北市大安區學生考上台大的機率,是其他地區的六倍以上」。

Continue reading


Mar 31 2010

終於把書寫完了

構思了一陣子,幾個月的撰寫,最近終於把書完成了。

當自己寫書的時候,才知道一本書產生的過程頗為繁複,不禁對於過去那些對於人類知識有貢獻的教科書作者產生莫名的敬意。

一本程式語言的書、或是類似的教科書,往往是眾多知識的累積與彙整。由於 R 軟體的函數沒有幾千有也上萬,在寫書的過程中,哪些函數該加入、哪些函數該捨棄,往往是花最多時間之處。

另一個考量點是自己必需回到當初開始學習 R 軟體時,那種知識爆炸、面對眾多資訊不知從何開始的心態,嘗試去站在一個初學者的立場,思考他們該需要些什麼資訊。這種「回到初衷」的心態轉變,往往是許多程式功力高強的書籍作者們最為忽視的。

Continue reading


Dec 27 2009

實驗設計期末報告資料

資料網址:

http://steve-chen.net/anova/final.txt


Apr 19 2009

時間數列考古題

時間數列考古題請見以下連結:

0-ts.zip

另外,R 軟體中,TSA 模組(package) 裡面有 eacf() 函數可以計算 EACF 值