【发布时间】:2019-11-09 11:25:58
【问题描述】:
我有一个 Python 代码,可以很好地在数据集上执行 k-fold CV。我的 Python 代码如下所示:
import pandas
import numpy as np
from sklearn.model_selection import KFold
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import SVR
from sklearn.utils import shuffle
# Load the dataset.
dataset = pandas.read_csv('values.csv')
# Preprocessing the dataset.
X = dataset.iloc[:, 0:8]
Y = dataset.iloc[:, 8] # The class value is the last column and is called Outcome.
# Scale all values to 0,1.
scaler = MinMaxScaler(feature_range=(0, 1))
X = scaler.fit_transform(X)
# 3-fold CV computation.
scores = []
svr_rbf = SVR(kernel='rbf', gamma='auto')
cv = KFold(n_splits=3, random_state=42, shuffle=False)
for train_index, test_index in cv.split(X):
X_train, X_test = X[train_index], X[test_index]
Y_train, Y_test = Y[train_index], Y[test_index]
svr_rbf.fit(X_train, Y_train)
scores.append(svr_rbf.score(X_test, Y_test))
现在,我想用 R 重写同样的东西,我尝试做这样的事情:
library(base)
library(caret)
library(tidyverse)
dataset <- read_csv("values.csv", col_names=TRUE)
results <- train(Outcome~.,
data=dataset,
method="smvLinear",
trControl=trainControl(
method="cv",
number=3,
savePredictions=TRUE,
verboseIter=TRUE
))
print(results)
print(results$pred)
我的数据和这个类似:https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data 除了这个有 12 个属性,第 13 列是类,在我的例子中,有 8 个属性,第 9 个是类。但是,就价值而言,它是相似的。
现在,我可以看到打印的结果,但是有一些我不清楚的地方。
1) 在我的 Python 代码中,我对值进行了这种缩放,我如何在 R 中做到这一点?
2) 我已经使用带有rbf 内核的 SVR,如何在 R 中使用带有该内核的 SVR 而不是 SMV?
3) 另外,在 Python 版本中,我使用 random_state=42(只是一个随机数)来生成折叠的拆分,因此它使用不同的折叠。但它在不同的执行过程中是一致的。如何在 R 中做到这一点?
4) 最后,在 Python 中,我在每个折叠的 for 循环中进行训练。我在 R 中也需要这样的东西,因为每次折叠后,我都想执行一些其他的统计和计算。在 R 中如何做到这一点?
5) 我应该坚持使用caret 还是使用mlr 包? mlr 也做 k 折简历吗?如果是怎么办?
编辑:
library(base)
library(caret)
library(tidyverse)
dataset <- read_csv("https://gist.githubusercontent.com/dmpe/bfe07a29c7fc1e3a70d0522956d8e4a9/raw/7ea71f7432302bb78e58348fede926142ade6992/pima-indians-diabetes.csv", col_names=FALSE)
print(dataset)
X = dataset[, 1:8]
print(X)
Y = dataset$X9
set.seed(88)
nfolds <- 3
cvIndex <- createFolds(Y, nfolds, returnTrain = T)
fit.control <- trainControl(method="cv",
index=cvIndex,
number=nfolds,
classProbs=TRUE,
savePredictions=TRUE,
verboseIter=TRUE,
summaryFunction=twoClassSummary,
allowParallel=FALSE)
rfCaret <- caret::train(X, Y, method = "svmLinear", trControl = fit.control)
print(rfCaret)
【问题讨论】:
标签: python r machine-learning r-caret