數據集
我們選用kknn軟件包中的miete數據集進行算法演示,該數據集記錄了1994年慕尼黑的住房租金標准中的一些有趣變量,比如房子的面積、是否有浴室、是否有中央供暖、是否供應熱水等,這些都影響並決定着租金的高低。
1 數據概況
library(kknn)
data(miete)
head(miete)
dim(miete)
結果分析:該數據集共含有1082條樣本和17個變量。
summary(miete)
各變量的含義:
按照上表所示,我們在數據集中剔除含義重復的第1、3、12這三個變量,取余下的14個變量進行處理。且其中我們選擇第15個變量——按區間划分的凈租金(nmkat)作為待判別變量,一是由於該變量在含義上受其他各變量的影響,為被解釋變量;二是由summary0)輸出結果可知,nmkat 共含有5個類等級別,標號未1,2,3,4,5即代表租金額依次增加。其相應樣本量依次為219、230、210、208、215,即每一類的樣本量都為200多個,分布較為均勻。
2 數據預處理
下面我們將該數據集划分出訓練集和測試集為后續算法處理做准備。
為提高判別效果,我們考慮采用分層抽樣的方式,且由於前面所說的待判別變量nmkat 的樣本取值在5個等級中分布均勻,因此在分層抽樣過程中對這5個等級抽取等量樣本。具體實施程序如下:
install.packages("sampling")
library(sampling)
n<-round(2/3*nrow(miete)/5) #按照訓練集占數據總量2、3的比例,計算每一等級中應抽取的樣本量
n
subtrain=strata (miete, stratanames="nmkat" ,size=rep(n, 5) , method="srswor") #一nmkat變量的5個等級划分層次,進行分層抽樣
head(subtrain)
#顯示訓練集的抽取情況,包括nmkat變量的取值,該樣本在數據中的序號,被抽取到的概率,所在的層次
miete<-miete[,c(-1,-3,-12)]
datatrain<-miete[subtrain$ID_unit,]
datatest<-miete[-subtrain$ID_unit,]dim(data_train)
dim(datatrain) #訓練集
dim(data_test) #測試集
head(datatest)