首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重视滑雪隔离林的一些特点

如何重视滑雪隔离林的一些特点
EN

Stack Overflow用户
提问于 2022-05-27 07:24:54
回答 1查看 496关注 0票数 1

我使用滑雪隔离林执行异常检测任务。隔离林由iTrees组成。正如本论文所描述的,iTrees的节点按以下方式被分割:我们随机选择任意特征(一致),并对该特性的随机值执行拆分。

但是我想要比其他的更多的重视一些特征。因此,与其选择概率相等的特征,我想以更高的概率(赋予这些特征更多的权重)和其他概率较低的特征来绘制一些特征。

我怎么能这么做?从源代码上看,我似乎必须在_bagging.py中更改函数_generate_bagging_indices,但不确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-27 22:39:49

您可以在不更改源代码的情况下实现这一点。相反,您可以通过复制希望增加权重的功能来调整输入数据。如果您有一个功能出现两次,树将使用它两次来分割您的数据,这在实践中将意味着已经翻倍的功能重量。

除此之外,您还可以选择减少隔离林在每个树中使用的功能数量。这是由参数max_features控制的。默认值1.0确保每个树都将使用每个特性。通过减少它,会有更多的树被训练,而不需要在你的输入中使用较少的特征。

插图

负载数据

代码语言:javascript
复制
from sklearn.ensemble import IsolationForest
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

data = load_iris()
X = data.data
df = pd.DataFrame(X, columns=data.feature_names)

默认设置

代码语言:javascript
复制
IF = IsolationForest()
IF.fit(df)
preds = IF.predict(df)

plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=preds)
plt.title("Default settings")
plt.xlabel("sepal length (cm)")
plt.ylabel("sepal width (cm)")
plt.show()

加权设置

代码语言:javascript
复制
df1 = df.copy()
weight_feature = 10
for i in range(weight_feature):
    df1["duplicated_" + str(i)] = df1["sepal length (cm)"]

IF1 = IsolationForest(max_features=0.3)
IF1.fit(df1)
preds1 = IF1.predict(df1)

plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=preds1)
plt.title("Weighted settings")
plt.xlabel("sepal length (cm)")
plt.ylabel("sepal width (cm)")
plt.show()

正如你所看到的,第二个选项更密集地使用了X轴来确定哪一个是异常值。

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

https://stackoverflow.com/questions/72401876

复制
相关文章

相似问题

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