Python 获得OneClassSVM分类结果的确定性
我使用OneClassSVM和sklearn对未标记数据执行了异常检测。为了检查结果,我想对分类的确定性进行过滤。我遇到过预测概率,但我无法在OneClassSVM上使用它,因为属性错误:“OneClassSVM”对象没有属性“预测概率”。我不确定预测是否是正确的方法,我只是在寻找解决这个问题的方法时遇到的 下面是一段数据,其中CompanyID是商场的ID,1和2是商场两个独立入口上的传感器:Python 获得OneClassSVM分类结果的确定性,python,pandas,scikit-learn,svm,anomaly-detection,Python,Pandas,Scikit Learn,Svm,Anomaly Detection,我使用OneClassSVM和sklearn对未标记数据执行了异常检测。为了检查结果,我想对分类的确定性进行过滤。我遇到过预测概率,但我无法在OneClassSVM上使用它,因为属性错误:“OneClassSVM”对象没有属性“预测概率”。我不确定预测是否是正确的方法,我只是在寻找解决这个问题的方法时遇到的 下面是一段数据,其中CompanyID是商场的ID,1和2是商场两个独立入口上的传感器: import pandas as pd df = pd.DataFrame({"Datet
import pandas as pd
df = pd.DataFrame({"Datetime": [2016-6-13,2016-6-14,2016-6-15,2016-6-16],
"CompanyID": [271, 271, 271, 271],
"1": [140, 143, 142, 143],
"2": [42, 43, 49, 230]})
OneClassSVM模型。但我不确定如何获得分类的确定性
#support vector machines outlier detection
from sklearn import preprocessing, svm
import matplotlib.pyplot as plt
def find_outliers(ts, perc=0.02, figsize=(15,5)):
## fit svm
scaler = preprocessing.StandardScaler()
ts_scaled = scaler.fit_transform(ts.values.reshape(-1,1))
model = svm.OneClassSVM(nu=perc, kernel="rbf", gamma=0.03)
model.fit(ts_scaled)
## dtf output
df_outliers = ts.to_frame(name="ts")
df_outliers["index"] = ts.index
df_outliers["outlier"] = model.predict(ts_scaled)
df_outliers["outlier"] = df_outliers["outlier"].apply(lambda
x: 1 if x==-1 else 0)
##CERTAINTY OF THE CLASSIFICATION
##this line of code returns an error.
df_outliers["probability"] = model.predict_proba(df_outliers)
## plot
fig, ax = plt.subplots(figsize=figsize)
plt.title(f'SVM - Entrance: {column}. Antall outliers: '+str(sum(df_outliers["outlier"]==1)))
ax.plot(df_outliers["index"], df_outliers["ts"],
color="black")
ax.scatter(x=df_outliers[df_outliers["outlier"]==1]["index"],
y=df_outliers[df_outliers["outlier"]==1]['ts'],
color='red')
ax.grid(True)
plt.show()
# Return outlier column here
return(df_outliers['outlier'])
编辑:
正如@Zoro所指出的,predict_proba不适用于OneClassSVM。我怎样才能着手解决这个问题呢?我只是浏览了一下文档。它没有定义任何
predict\u proba
方法。您可以使用基于树的分类器,如或。谢谢您的输入。我已将你的评论添加到帖子中。然而,我希望能够通过支持向量机来实现这一点,而不是改变为基于树的方法。支持向量机不会产生概率分数。这是我在CrossValidate上发现的东西。
#loop over the entrances of the mall
for column in df.columns[2:]:
find_outliers(df[column])