异常检测技术及其应用

异常检测是指识别出与正常状态不同的数据点。这些异常可能因多种因素而产生,例如,肿瘤的形成可能是由于某些疾病,如癌症,导致细胞无限制地增长。在汽车行业,特定车型或其他交通工具的销售量异常高或低,也是数据中的异常。异常本质上是数据中的离群值。

在处理此类数据时,必须分析并检测这些异常,以便更容易进行治疗和了解应采取的行动。例如,当汽车行业的销售数据出现异常时,无论是高还是低,都需要识别出来。异常检测的方法包括数据可视化、统计方法机器学习算法。

使用数据可视化工具,如seaborn、matplotlib、plotly或商业软件如tableau、PowerBI、Qlik Sense、Excel等,可以帮助理解数据及其在数据中的分布,特别是通过箱线图、小提琴图和散点图来识别异常。

在存在异常值的情况下,平均值可能无法给出正确的中间值。中位数比平均值更能准确反映数据的中心位置,因为中位数是将数据值排序后找到中间位置,而平均值则是简单地对数据值求平均。要找到数据右侧和左侧的异常值,可以使用Q3+1.5(IQR)和Q1-1.5(IQR)。此外,通过找到数据的最大值、最小值和中位数,可以判断数据中是否存在异常。

使用无监督算法进行异常检测的优势在于,可以同时为数据中的多个变量或特征检测异常,而不是单独为每个变量进行检测。这可以是单变量异常检测和多变量异常检测。

孤立森林是一种无监督技术,用于在没有标签或真实值的情况下检测异常。它是一种基于树的模型,与决策树的构建方式不同。孤立森林与决策树的主要区别在于,决策树是监督学习算法,而孤立森林是无监督学习算法。

from sklearn.ensemble import IsolationForest isolation_forest = IsolationForest(n_estimators=1000, contamination=0.08) isolation_forest.fit(df['Rate'].values.reshape(-1, 1)) df['anomaly_score_rate'] = isolation_forest.decision_function(df['rate'].values.reshape(-1, 1)) df['outlier_univariate_rate'] = isolation_forest.predict(df['rate'].values.reshape(-1, 1))

在孤立森林算法中,contamination参数在检测更多异常时起着重要作用。Contamination是给算法的值的百分比,表示数据中存在多少百分比的异常。例如,当给出0.10作为contamination值时,算法会认为数据中有10%的异常。通过找到最佳的contamination值,将能够以良好的数量检测异常。

当想要进行多变量异常检测时,必须首先对数据值进行归一化,以便算法可以给出正确的预测。在处理连续值时,归一化或标准化是必不可少的。

minmax = MinMaxScaler(feature_range=(0, 1)) X = minmax.fit_transform(df[['rate','scores']]) clf = IsolationForest(n_estimators=100, contamination=0.01, random_state=0) clf.fit(X) df['multivariate_anomaly_score'] = clf.decision_function(X) df['multivariate_outlier'] = clf.predict(X)

局部异常因子也是一种无监督算法,它不是基于树的,而是基于密度的算法,如KNN、Kmeans。当任何数据点被视为异常值时,取决于其局部邻域,它就是局部异常值。LOF将根据邻居的密度识别异常值。当数据点的密度在整个数据集中不恒定时,LOF表现良好。

minmax = MinMaxScaler(feature_range=(0, 1)) X = minmax.fit_transform(df[['rate','scores']]) # Novelty detection clf = LocalOutlierFactor(n_neighbors=100, contamination=0.01,novelty=True) #when novelty = True clf.fit(X_train) df['multivariate_anomaly_score'] = clf.decision_function(X_test) df['multivariate_outlier'] = clf.predict(X_test) # Outlier detection local_outlier_factor_multi=LocalOutlierFactor(n_neighbors=15,contamination=0.20,n_jobs=-1) # when novelty = False multi_pred=local_outlier_factor_multi.fit_predict(X) df1['Multivariate_pred']=multi_pred from sklearn.svm import OneClassSVM pred=clf.predict(X) anomaly_score=clf.score_samples(X) clf = OneClassSVM(gamma='auto',nu=0.04,gamma=0.0004).fit(X) from sklearn.covariance import EllipticEnvelope model1 = EllipticEnvelope(contamination = 0.1) # fit model model1.fit(X_train) model1.predict(X_test)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485