dataset = read.table("", sep = ",",header = f, na.strings = "?")
head(dataset)
#分割資料的訓練集和測試集
set.seed(123)
dataset=na.omit(dataset)
n=dim(dataset)[1]
index=sample(n,round(0.7*n))
train=dataset[index,]
test=dataset[-index,]
dim(train)
####有時候,需要轉化變數為啞變數,因為在一些挖掘場合,資料不能直接使用因子型的資料
knnglmnet
svmxgboost
###有些挖掘方法可以使用因子變數,比如:
logistic regression
repart
gbmrandomforest
dataset2=dataset
library(plyr)
into_factor = function(x)else
output
}into_factor(dataset$v4)[1:5,]
dataset2=colwise(into_factor)(dataset2)
dataset2=do.call(cbind,dataset2)
dataset2=as.data
.frame(dataset2)
dim(dataset2)
#####使用logistic回歸來進行測試建模和**,使用glm
logit.model=glm(v16~.,data=train,family = "binomial")
logit.response=predict(logit.model,test,type="response")
logit.predict=ifelse(logit.response>0.5,"+","-")
table(logit.predict,test$v16)
accutancy1=mean(logit.predict==test$v16)
####使用gbm方法來**,這裡用的是caret,repeat-cv來選擇最優樹
library(caret)
ctrl=traincontrol(method = "repeatedcv",number = 5,repeats=5)
set.seed(300)
gbm.predict=predict(m_gbm,test)
table(gbm.predict,test$v16)
accutancy2=mean(gbm.predict==test$v16)
####首先測試乙個knn模型,不做cv,不做標準化,不做資料型別轉化得到的結果,這裡,不轉換資料型別會把因子型別的變數捨棄,僅保留資料變數
library(caret)
knn.model1=knn3(v16~.,data=train,k=5)
knn.response1=predict(knn.model1,test,class="response")
knn.predict1=ifelse(knn.response1[,1]<0.5,"+","-")
table(knn.predict1,test$v16)
mean(knn.predict1==test$v16)
#####經過標準化和資料轉換之後的準確率
knn.dataset=cbind(colwise(scale)(dataset2[,-38]),v16=as.factor(dataset2$v16))
set.seed(123)
index=sample(n,round(0.7*n))
train.knn=knn.dataset[index,]
test.knn=knn.dataset[-index,]
knn.model1 = knn3(v16 ~ .,data = train.knn, k = 5)
knn.predict1 = predict(knn.model1,test.knn,,type = "class")
table(knn.predict1,test.knn$v16)
mean(knn.predict1 == test.knn$v16)
#####knn cv for k 不管是我的這個程式函式caret,總算出來應該是k=2的時候誤差最小,但是實際情況不是這樣
library(class)
cv.knn = function(data,n=5,k)
mean(acc)}
cv.knn(train.knn,3,5)
k = 2:20
set.seed(123)
plot(k,acc,type = "b")
k.final = which.max(acc)
knn.model
.f = knn3(v16 ~ .,data = train.knn, k = k.final)
knn.predict
.f = predict(knn.model
.f,test.knn,type = "class")
table(knn.predict
.f,test.knn$v16)
mean(knn.predict
.f == test.knn$v16)
library(caret)
fitcontrol <- traincontrol(method = "cv", number = 10)
knntune <- train(x = dataset2[1:37], y = dataset2[,38], method = "knn", preproc = c("center", "scale"),tunegrid = data.frame(.k = 1:20), trcontrol = fitcontrol)
############xgboost
require(xgboost)
require(methods)
require(plyr)
set.seed(123)
set.seed(123)
index = sample(n,round(0.7*n))
train.xg = dataset2[index,]
test.xg = dataset2[-index,]
label <- as.matrix(train.xg[,38,drop =f])
data <- as.matrix(train.xg[,-38,drop =f])
data2 <- as.matrix(test.xg[,-38,drop =f])
label2 = as.matrix(test.xg[,38,drop =f])
# weight <- as.numeric(dtrain[[32]]) * testsize / length(label)
xgmat <- xgb.dmatrix(data, label = label, missing = -10000)
param <- list("objective" = "binary:logistic","bst:eta" = 1,"bst:max_depth" = 2,"eval_metric" = "logloss","silent" = 1,"nthread" = 16 ,"min_child_weight" =1.45)
nround =275
bst = xgb.train(param, xgmat, nround )
res1 = predict(bst,data2)
pre1 = ifelse(res1>0.5,1,0)
table(pre1,label2)
accurancy4 = mean(pre1 ==label2)
R軟體處理資料集中的缺失值
現實中的資料集經常會遇到缺失值的情況,在模型分析之前往往需要對其進行適當的處理,其方法無外乎刪除與填補。但無論是刪除還是填補,均應該先檢視缺失值情況,以algae資料集為例 ld algae complete.cases algae 取數的思路就是先定位到缺失值,再提取出來,記住r中所有操作皆是函式...
集中不同的排序演算法
排序演算法的實現 氣泡排序 選擇排序 快速排序 二分查詢 快速排序 氣泡排序 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複...
R中協同過濾演算法
協同過濾常常被用於分辨某位特定顧客可能感興趣的東西,這些結論來自於其他相似顧客對哪些產品感興趣的分析。資料結構 協同過濾,主要收集每個使用者對使用過的物品的評價。評價可以理解為經常在電商 上出現的,五星級的評分。注意 不同使用者的評分標準不同,所以需要對評分進行標準化處理。標準化為0 1之間的值。使...