Python实现Isolation Forest离群点检测及可视化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
# 加载数据集
df = pd.read_csv('1.csv')
# 可视化初始数据分布
plt.scatter(df['x'], df['y'], c='b', s=10, alpha=0.5)
plt.title('初始数据分布')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
# 训练Isolation Forest模型
clf = IsolationForest(n_estimators=100, max_samples='auto', contamination=0.1, random_state=0)
clf.fit(df)
y_pred = clf.predict(df)
# 可视化离群点
plt.scatter(df[y_pred==-1]['x'], df[y_pred==-1]['y'], c='r', s=30, alpha=0.7, label='离群点')
plt.scatter(df[y_pred==1]['x'], df[y_pred==1]['y'], c='b', s=10, alpha=0.5, label='正常样本')
plt.title('Isolation Forest离群点检测结果')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
这段代码展示了如何使用Python和Scikit-learn库中的Isolation Forest算法进行离群点检测。
代码解释:
-
导入必要的库:
pandas用于数据处理和读取CSV文件。numpy用于数值计算。matplotlib.pyplot用于数据可视化。sklearn.ensemble中的IsolationForest是用于离群点检测的算法。
-
加载数据集:
- 使用
pd.read_csv('1.csv')读取名为 '1.csv' 的CSV文件,并将其存储在名为df的 Pandas DataFrame 中。
- 使用
-
可视化初始数据分布:
- 使用
plt.scatter()函数绘制散点图,展示数据集在 'x' 和 'y' 两个特征上的分布情况。 - 设置点的颜色、大小和透明度,并添加标题和轴标签以增强可读性。
- 使用
-
训练Isolation Forest模型:
- 使用
IsolationForest()函数初始化 Isolation Forest 模型,并设置模型参数:n_estimators: 使用的决策树数量。max_samples: 每个决策树使用的样本数量。contamination: 预期离群点比例。random_state: 随机种子,确保结果可复现。
- 使用
clf.fit(df)函数用数据集df训练模型。 - 使用
clf.predict(df)函数对数据集进行预测,得到每个样本的标签(1 表示正常样本,-1 表示离群点),存储在y_pred中。
- 使用
-
可视化离群点:
- 再次使用
plt.scatter()函数绘制散点图,这次根据预测结果区分正常样本和离群点,并使用不同的颜色、大小和透明度进行区分。 - 添加图例、标题和轴标签以增强可读性。
- 再次使用
通过运行这段代码,你将获得两张图表:一张展示初始数据的分布,另一张展示 Isolation Forest 算法识别出的离群点。
原文地址: https://www.cveoy.top/t/topic/fVIt 著作权归作者所有。请勿转载和采集!