sklearn 中的属性错误 svm.SVC
attribute error in sklearn svm.SVC
使用 scikit-learn 实现线性 SVM 时出现属性错误问题。我正在使用通过 RFECV 方法进行交叉验证的线性分类器,但我无法访问 SVC 的任何属性。不确定是否与特征选择或基本模型有关。
model = svm.SVC(kernel='linear')
selector=RFECV(model)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=pct_test)
selector=selector.fit(X_train, Y_train)
my_prediction = selector.predict(X_test)
f1.append(metrics.f1_score(Y_test, my_prediction))
kappa.append(metrics.cohen_kappa_score(Y_test, my_prediction))
precision.append(metrics.precision_score(Y_test, my_prediction))
recall.append(metrics.recall_score(Y_test, my_prediction))
print model.intercept_
print model.support_vectors_
print model.coef_
指标工作正常,属性全部失败。
错误信息是:
AttributeError: 'SVC' 对象没有属性 'intercept_'
文档:http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC
旁白:我对 OOP 很陌生。如果我遗漏了一个基本概念,请详细说明或发送 link.
您正在 RFECV 对象 selector
上拟合(训练数据),但试图访问 SVC 对象 model
的属性。但它没有受过训练。因此其中没有属性intercept_
。
要访问SVC的拦截,你应该使用:
selector.estimator_.intercept_
但请注意,上述估计器仅适用于缩减数据集(按指定消除特征后)
解释:
你看,RFECV 在内部使用 RFE 在每次迭代中获取重要特征。 RFE 为此目的克隆了提供的估算器。所以当你用 model
初始化 RFECV 时,它是在模型的克隆上训练的。
检查 source code:
第407行(RFECV的拟合方法内部):
rfe = RFE(estimator=self.estimator,
n_features_to_select=n_features_to_select,
step=self.step, verbose=self.verbose)
第 428 行(用于估算分数):
scores = parallel(func(rfe, self.estimator, X, y, train, test, scorer)
for train, test in cv.split(X, y))
然后第165行(RFE的Inside fit方法):
estimator = clone(self.estimator)
使用 scikit-learn 实现线性 SVM 时出现属性错误问题。我正在使用通过 RFECV 方法进行交叉验证的线性分类器,但我无法访问 SVC 的任何属性。不确定是否与特征选择或基本模型有关。
model = svm.SVC(kernel='linear')
selector=RFECV(model)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=pct_test)
selector=selector.fit(X_train, Y_train)
my_prediction = selector.predict(X_test)
f1.append(metrics.f1_score(Y_test, my_prediction))
kappa.append(metrics.cohen_kappa_score(Y_test, my_prediction))
precision.append(metrics.precision_score(Y_test, my_prediction))
recall.append(metrics.recall_score(Y_test, my_prediction))
print model.intercept_
print model.support_vectors_
print model.coef_
指标工作正常,属性全部失败。 错误信息是:
AttributeError: 'SVC' 对象没有属性 'intercept_'
文档:http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC
旁白:我对 OOP 很陌生。如果我遗漏了一个基本概念,请详细说明或发送 link.
您正在 RFECV 对象 selector
上拟合(训练数据),但试图访问 SVC 对象 model
的属性。但它没有受过训练。因此其中没有属性intercept_
。
要访问SVC的拦截,你应该使用:
selector.estimator_.intercept_
但请注意,上述估计器仅适用于缩减数据集(按指定消除特征后)
解释:
你看,RFECV 在内部使用 RFE 在每次迭代中获取重要特征。 RFE 为此目的克隆了提供的估算器。所以当你用 model
初始化 RFECV 时,它是在模型的克隆上训练的。
检查 source code:
第407行(RFECV的拟合方法内部):
rfe = RFE(estimator=self.estimator,
n_features_to_select=n_features_to_select,
step=self.step, verbose=self.verbose)
第 428 行(用于估算分数):
scores = parallel(func(rfe, self.estimator, X, y, train, test, scorer)
for train, test in cv.split(X, y))
然后第165行(RFE的Inside fit方法):
estimator = clone(self.estimator)