【发布时间】:2021-12-18 12:38:08
【问题描述】:
我有一个格式如下的 pandas 数据框:
这包含 3 家公司 MSFT、F 和 BAC 每天的股价变化百分比。
我想使用 OneClassSVM 计算器来检测数据是否为异常值。我尝试了以下代码,我相信它可以检测到包含异常值的行。
#Import libraries
from sklearn.svm import OneClassSVM
import matplotlib.pyplot as plt
#Create SVM Classifier
svm = OneClassSVM(kernel='rbf',
gamma=0.001, nu=0.03)
#Use svm to fit and predict
svm.fit(delta)
pred = svm.predict(delta)
#If the values are outlier the prediction
#would be -1
outliers = where(pred==-1)
#Print rows with outliers
print(outliers)
这给出了以下输出:
然后我想在我的数据框中添加一个新列,其中包括数据是否为异常值。我尝试了以下代码,但由于列表长度不同,如下所示,出现错误。
condition = (delta.index.isin(outliers))
assigned_value = "outlier"
df['isoutlier'] = np.select(condition,
assigned_value)
鉴于包含异常值的行列表要短得多,您能否告诉我我可以添加此列?
【问题讨论】:
标签: python dataframe svm data-mining outliers