如何正确格式化数据以运行SVM算法?

时间:2019-05-04 12:04:42

标签: python arrays machine-learning svm

Jupyter NotebookPyCharm中,我都可以使用虹膜数据运行下面的SVM算法,而不会出现问题。但是,当我用自己的数据交换虹膜数据时,在Jupyter Notebook中得到:

内核似乎已经死亡。它将自动重启。

在PyCharm中,我得到:

进程退出代码为139(信号11:SIGSEGV中断)

这很好:

from sklearn.datasets import load_iris
iris=load_iris()
# iris
from sklearn import datasets
from sklearn import metrics
from sklearn.svm import SVC
# load the iris datasets
dataset = datasets.load_iris()
# fit a SVM model to the data
model = SVC()
model.fit(dataset.data, dataset.target)
print(model)

当我尝试用自己的数据集替换虹膜数据时,问题就开始了,我认为该数据集的格式正确。您可以在(individual-level)处获取数据集:

#data = pd.io.stata.read_stata('individual.dta')
#data.to_csv('individual.csv')
ind = pd.read_csv('individual.csv')
ind = ind.dropna()
train, test = train_test_split(ind, test_size=0.2)
df = pd.DataFrame()
df['patience'] = train['patience']
df['risktaking'] = train['risktaking']
df['posrecip'] = train['posrecip']
df['negrecip'] = train['negrecip']
df['altruism'] = train['altruism']
df['trust'] = train['trust']
index = train['Unnamed: 0']
dataset = {}
data = np.ascontiguousarray(df.values) 
#print(dataset['data'].flags) #shows C-Contiguous as TRUE
dataset['data'] = data
index = index.values
dataset['target'] = index

from sklearn.svm import SVC
X = dataset['data']
y = dataset['target']

clf = SVC(gamma='auto')
clf.fit(X, y) 

print(clf.predict([[0.04717605, 1.0202034, 1.0202034, -0.3671751, -0.1399527, 1.6797541]]))

当我将虹膜数据集与我制造的虹膜数据集进行比较时,它们看起来在类型上是相同的-显然尺寸是不同的,但这不应该影响SVM模型。

我认为构造数组的方式一定存在问题,从而通过SVC()更改了它们的解释。我在设置“数据”和“目标”的dict()属性时遇到了麻烦。

如您所见,虹膜数据集称为“ dataset.data,dataset.target”,而我不得不求助于“ dataset ['data'],dataset ['target']”。

我放置了两个版本的SVC(),因此您可以看到它们对于虹膜数据都可以正常工作,但是都不太喜欢我的数据。

我们非常感谢您的帮助。代码批评家:只有真正解决问题,您才会有所帮助。花生画廊的评论没有用。

1 个答案:

答案 0 :(得分:0)

这是我通过此previous answer:找到的解决方案,可以成功应用。

现在,答案不能完全解决我在此示例中面临的问题-主要是内核停止响应。 我仍然不知道为什么。我的尝试失败了。

但是,提供的链接和答案确实允许我以适当的方式组织数据集并将其应用于SVC模型。