首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得OneClassSVM分类结果的确定性

获得OneClassSVM分类结果的确定性
EN

Stack Overflow用户
提问于 2021-03-20 12:50:59
回答 1查看 228关注 0票数 0

我使用OneClassSVM对未标记数据进行了异常检测。为了检查结果,我想对分类的确定性进行过滤。我遇到过predict_proba,,但我无法在OneClassSVM上使用它作为AttributeError:'OneClassSVM‘对象没有属性'predict_proba'。我不确定predict_proba是否正确,我只是在寻找解决这个问题的过程中遇到了这个问题。

这里是数据片段,其中CompanyID是购物中心的ID,1和2是购物中心两个独立入口上的传感器:

代码语言:javascript
复制
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模型。但我不知道如何获得分类的确定性。

代码语言:javascript
复制
#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'])
代码语言:javascript
复制
#loop over the entrances of the mall
for column in df.columns[2:]:
    find_outliers(df[column])

编辑:正如@Zoro所指出的,predict_proba不适用于OneClassSVM。我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2021-03-20 12:55:18

我只是浏览了一下sklearn.svm.OneClassSVM的文档。它没有定义任何predict_proba方法。您可以使用基于树的分类器,如DecisionTreesRandomForestClassifier

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66721803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档