import data as data import pandas as pd import warnings import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import IsolationForest from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler warnings.filterwarnings('ignore') plt.rcParams['font.sans-serif'] =['SimHei'] ##显示中文 plt.rcParams['axes.unicode_minus'] = False data = pd.read_csv('./data/dataset.csv') data['label'] = 0 # 异常值 # 三列值小于0 data.loc[(data['WindSpeed'] <= 0), 'label'] = 1 data.loc[(data['Power'] <= 0), 'label'] = 1 data.loc[(data['RotorSpeed'] <= 0), 'label'] = 1 def isolationForest_model(contamination='auto',max_samples=0.1,isStandard=True): if isStandard: model = Pipeline([ ('ss', StandardScaler()), #数据标准化过程 ('iForest', IsolationForest(max_samples=max_samples,contamination=contamination))]) else: model = Pipeline([ ('iForest', IsolationForest(max_samples=max_samples,contamination=contamination))]) return model features=['WindSpeed','Power', 'RotorSpeed'] new_data=pd.DataFrame() new_data=new_data.append(data[data['label']==1]) df1 = data['label']==0 model = isolationForest_model(isStandard=True,contamination=0.05) model.fit(df1[features]) #返回1表示正常值,-1表示异常值 result = model.predict(df1[features]) df1['label'] = result df1['label']=df1['label'].map({-1:1,1:0}) new_data=new_data.append(df1) new_data.loc[new_data['label']!=0,'label']=1
时间: 2024-01-25 17:02:24 浏览: 140
python数据分析与可视化 import pandas as pd import numpy as np import m
这段代码的主要功能是使用孤立森林算法来检测数据集中的异常值。具体实现步骤如下:
1. 导入必要的库,包括 pandas、numpy、matplotlib 和 sklearn 中的 IsolationForest 模型等。
2. 读取数据集,将数据集中三列值小于等于 0 的行标记为异常值。
3. 定义一个孤立森林模型,并设置是否需要对数据进行标准化处理。如果需要对数据进行标准化,则使用 sklearn 中的 StandardScaler 来进行处理。
4. 定义特征列,即三列值。
5. 创建一个空 DataFrame,用于保存检测到的异常值。
6. 对于所有被标记为异常值的行,将它们添加到新的 DataFrame 中。
7. 对于所有未被标记为异常值的行,使用孤立森林模型进行检测,并将检测结果添加到 DataFrame 中。
8. 将新的 DataFrame 中所有非正常值的行标记为异常值。
该代码的目的是为了数据预处理,检测数据集中的异常值,并将其标记出来,以便后续的数据分析和建模工作。
阅读全文