python - python (Scikit-Learn) 和 R (e1071) 的精度不同

标签 python r scikit-learn libsvm

对于相同的数据集(此处为 Bupa)和参数,我得到不同的准确度。

我忽略了什么?

R 实现:

data_file = "bupa.data"
dataset = read.csv(data_file, header = FALSE)
nobs <- nrow(dataset) # 303 observations 
sample <- train <- sample(nrow(dataset), 0.95*nobs) # 227 observations
# validate <- sample(setdiff(seq_len(nrow(dataset)), train), 0.1*nobs) # 30 observations
test <- setdiff(seq_len(nrow(dataset)), train) # 76 observations
svmfit <- svm(V7~ .,data=dataset[train,],
              type="C-classification",
              kernel="linear",
              cost=1,
              cross=10)
testpr <- predict(svmfit, newdata=na.omit(dataset[test,]))
accuracy <- sum(testpr==na.omit(dataset[test,])$V7)/length(na.omit(dataset[test,])$V7)

我得到准确度:0.94

但是当我在 python (scikit-learn)

中执行以下操作时
import numpy as np
from sklearn import cross_validation
from sklearn import datasets
import pandas as pd
from sklearn import svm, grid_search

f = open("data/bupa.data")
dataset =  np.loadtxt(fname = f, delimiter = ',')
nobs = np.shape(dataset)[0]
print("Number of Observations: %d" % nobs)
y = dataset[:,6]
X = dataset[:,:-1]
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.06, random_state=0)

clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
scores = cross_validation.cross_val_score(clf, X, y, cv=10, scoring='accuracy')

我得到准确度 0.67

请帮助我。

最佳答案

我发现这篇文章有同样的问题——scikit-learn 和 e1071 绑定(bind)的 libSVM 之间的准确度大不相同。我认为问题在于 e1071 缩放训练数据然后保留缩放参数以用于预测新观察。 Scikit-learn 不会这样做,而是让用户意识到需要对训练数据和测试数据采用相同的缩放方法。我只是在遇到和阅读后才想到检查这个this guide来自 libSVM 背后的好人。

虽然我没有你的数据,str(svmfit) 应该给你缩放参数(Bupa 列的均值和标准差)。您可以使用它们在 Python 中适本地缩放您的数据(请参阅下面的想法)。或者,您可以在 Python 中一起缩放整个数据集,然后进行测试/训练拆分;无论哪种方式现在都应该给你相同的预测。

def manual_scale(a, means, sds):
    a1 = a - means
    a1 = a1/sds
    return a1 

关于python - python (Scikit-Learn) 和 R (e1071) 的精度不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33743791/

相关文章:

Python 正则表达式 : "re.match()" works differently than "re.sub()" for regex

R : convert discrete column into matrix of logical values

python - 如何在 TensorFlow 中使用我自己的数据将图像拆分为测试集和训练集

python - 带有对数图的 Type 1 字体

python - Selenium 点击的视觉反馈

R 和 odbcDriverConnect() 将 R 连接到 teradata

r - blogdown + hugo,标签式代码块不显示主题 tranquilpeak

python - 我想获取不包括零的行的最小数字索引

python - 为什么文本的特征提取不返回所有可能的特征名称?

python - Django - 从其他 URL 获取 POST 数据