【发布时间】:2019-09-22 17:44:41
【问题描述】:
在Jupyter Notebook 和PyCharm 中,我可以使用虹膜数据运行以下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]]))
当我将 iris 数据集与我制造的数据集进行比较时,它们在类型方面看起来是相同的 - 显然尺寸不同,但这不应该影响 SVM 模型。
我认为我构造数组的方式一定有问题,从而改变了 SVC() 对它们的解释。我之前在设置“数据”和“目标”的 dict() 属性时遇到了麻烦。
如您所见,鸢尾花数据集调用“dataset.data, dataset.target”,而我不得不求助于“dataset['data'], dataset['target']”。
我放了两个版本的 SVC(),这样你就可以看到它们都适用于虹膜数据,但都不太喜欢我的数据。
感谢您的帮助。代码批评者:只有真正解决了问题,你才会有所帮助。花生画廊的评论没有用。
【问题讨论】:
-
你的数据集有多大?请
print(x.shape) -
大约 60k 行。
-
在阅读 SVC 模型 scikit-learn.org/stable/modules/svm.html#svm 时,在第 1.4.5 节实际使用技巧中,提到了确保数组是 C 连续的。虽然我的数组最初不是 C 连续的,但我已经修复了这个问题(并在上面的代码中进行了编辑),但是,这并不能解决问题
-
如果你这样做
.fit(X[:1000], y[:1000]),会发生什么? -
好点。有用。尽管如此,数据点并不多。到目前为止,我已经尝试将它提高到 30k,并且它已经处理了很长时间的数字。我在下面发布了一个解决方案的链接:简单得多,并且利用了整个数据集并且速度非常快。我不确定究竟是什么让我的示例在计算上如此密集。
标签: python arrays machine-learning svm