R中的集中演算法整合

2021-07-22 04:55:51 字數 3911 閱讀 4293

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之間的值。使...