在 python 中提取 SVM 模型的分类
Extracting the Classification of a SVM model in python
我第一次使用 SVM python。我还使用了 5 个交叉验证来检查模型的准确性。
模型的objective是对输出是否有缺陷进行分类。我想根据原始数据集交叉检查输出分类。换句话说,我想了解哪些产品已被归类为缺陷,哪些具体产品未被归类为缺陷。我该怎么做?
我的代码:
from sklearn.svm import SVC
svclassifier_rbf = SVC(kernel='rbf')
clf = svclassifier_rbf.fit(X_train, y_train)
from sklearn.metrics import classification_report, confusion_matrix
print(confusion_matrix(y_test,y_pred_A_rbf))
print(classification_report(y_test,y_pred_A_rbf)
)
谢谢,
尼姆语
如果您处理分类问题只是为了测试模型的准确性和行为,请使用
from sklearn.metrics import accuracy_score
accuracy_score(y_test,clf.predict(your_X_test))
参考我的 git link 进行文档分类 我在 tfidf/count 向量化器功能之上使用了朴素贝叶斯。
Document classification using MultinomialNB
希望对您进行文档分类有所帮助
您可以使用以下代码获取预测为缺陷的记录。我假设 X_test 是您的测试输入数据。
print(X_test[y_pred_A_rbf==1])
我没有看到代码的交叉验证部分。假设你已经完成了,它看起来像这样:
from sklearn.model_selection import KFold
from sklearn.svm import SVC
kf = KFold(n_splits = 5, shuffle = True)
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train = y_true[train_index]
svclassifier_rbf = SVC(kernel='rbf')
svclassifier_rbf.fit(X_train, y_train)
###### NEXT LINE NEEDED #######
y_pred_A_rbf[test_index] = svclassifier_rbf.predict(X_test)
您的代码中缺少的是 svclassifier_rbf.predict(X_test)
这用于预测您的 classes。您现在可以获取变量 y_pred_A_rbf
的值并将其传递给混淆矩阵以读取真阳性、真阴性、假阳性和假阴性。 Python中一个典型的混淆矩阵可以映射到下图:
现在您已经有了实际标签和预测标签的两个数组,您可以执行类似 如果实际标签和预测标签为真,或者换句话说为 1,则它们是真阳性,并且被正确地 classified,同样,您可以对真阴性、假阳性和假阴性进行以下操作,以研究哪些记录已被预测和 class正确或不正确。
例如,如果您想知道哪些记录已被正确class确定为阳性class(在这种情况下,我们假设有缺陷),您可以这样做:
tp = np.where((y_true == 1) & (y_pred == 1), 'True Positive', 'Else')
您现在将获得所有已 class 正确化为正 class 的记录的索引。
你有很多方法来测试你的 y_pred 有多准确。基本上,您需要匹配 y_pred 和 y_test。如果您是该领域的新手并且在解释混淆矩阵和报告时遇到问题,您可以简单地在 CSV 文件中打印您的 y_pred 并将其与 y_test 进行比较。这将为您提供场景的实际情况。
np.savetxt("filename.csv",y_pred,delimiter=",",fmt="%.5f")
我第一次使用 SVM python。我还使用了 5 个交叉验证来检查模型的准确性。
模型的objective是对输出是否有缺陷进行分类。我想根据原始数据集交叉检查输出分类。换句话说,我想了解哪些产品已被归类为缺陷,哪些具体产品未被归类为缺陷。我该怎么做?
我的代码:
from sklearn.svm import SVC
svclassifier_rbf = SVC(kernel='rbf')
clf = svclassifier_rbf.fit(X_train, y_train)
from sklearn.metrics import classification_report, confusion_matrix
print(confusion_matrix(y_test,y_pred_A_rbf))
print(classification_report(y_test,y_pred_A_rbf)
)
谢谢, 尼姆语
如果您处理分类问题只是为了测试模型的准确性和行为,请使用
from sklearn.metrics import accuracy_score
accuracy_score(y_test,clf.predict(your_X_test))
参考我的 git link 进行文档分类 我在 tfidf/count 向量化器功能之上使用了朴素贝叶斯。
Document classification using MultinomialNB
希望对您进行文档分类有所帮助
您可以使用以下代码获取预测为缺陷的记录。我假设 X_test 是您的测试输入数据。
print(X_test[y_pred_A_rbf==1])
我没有看到代码的交叉验证部分。假设你已经完成了,它看起来像这样:
from sklearn.model_selection import KFold
from sklearn.svm import SVC
kf = KFold(n_splits = 5, shuffle = True)
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train = y_true[train_index]
svclassifier_rbf = SVC(kernel='rbf')
svclassifier_rbf.fit(X_train, y_train)
###### NEXT LINE NEEDED #######
y_pred_A_rbf[test_index] = svclassifier_rbf.predict(X_test)
您的代码中缺少的是 svclassifier_rbf.predict(X_test)
这用于预测您的 classes。您现在可以获取变量 y_pred_A_rbf
的值并将其传递给混淆矩阵以读取真阳性、真阴性、假阳性和假阴性。 Python中一个典型的混淆矩阵可以映射到下图:
现在您已经有了实际标签和预测标签的两个数组,您可以执行类似 如果实际标签和预测标签为真,或者换句话说为 1,则它们是真阳性,并且被正确地 classified,同样,您可以对真阴性、假阳性和假阴性进行以下操作,以研究哪些记录已被预测和 class正确或不正确。
例如,如果您想知道哪些记录已被正确class确定为阳性class(在这种情况下,我们假设有缺陷),您可以这样做:
tp = np.where((y_true == 1) & (y_pred == 1), 'True Positive', 'Else')
您现在将获得所有已 class 正确化为正 class 的记录的索引。
你有很多方法来测试你的 y_pred 有多准确。基本上,您需要匹配 y_pred 和 y_test。如果您是该领域的新手并且在解释混淆矩阵和报告时遇到问题,您可以简单地在 CSV 文件中打印您的 y_pred 并将其与 y_test 进行比较。这将为您提供场景的实际情况。
np.savetxt("filename.csv",y_pred,delimiter=",",fmt="%.5f")