高效计算异常检测
Efficiently calculate anomaly detection
我有一些问题,希望你能帮助我,谢谢!!!!
我有一个 table 看起来像这样:
Computer
Data
Count
A
01/01/2021
43
A
02/01/2021
64
A
03/01/2021
333
A
04/01/2021
656
B
01/01/2021
41
B
02/01/2021
436
B
03/01/2021
745
B
04/01/2021
234
我想运行隔离森林算法只对部分table
我不知道像 df[df['Computer'] == A]['Count'] 那样手动为每台计算机做什么
有大约 500 台不同的计算机。
所以我不知道该怎么做:
scaler = StandardScaler()
np_scaled = scaler.fit_transform(df[df['Computer'] == A]['Count'].values.reshape(-1, 1))
data = pd.DataFrame(np_scaled)
# train isolation forest
model = IsolationForest(contamination=float(.01))
model.fit(data)
df['anomaly'] = model.predict(data)
500 次(对于 A 和 B 以及 C 和更多)
有办法有效地做到这一点
谢谢!!!
结果应该是这样的但是每次检查异常只分别针对A,B分别等等
Computer
Data
Count
anomaly
A
01/01/2021
43
1
A
02/01/2021
64
1
A
03/01/2021
333
1
A
04/01/2021
656
-1
B
01/01/2021
41
1
B
02/01/2021
436
1
B
03/01/2021
745
1
B
04/01/2021
234
1
您可以按 Computer
分组并使用 transform
对每个组执行您已有的函数,将与原始索引相同的索引返回到 anomaly
列。
def train_isolation_group(group_count):
scaler = StandardScaler()
np_scaled = scaler.fit_transform(group_count.values.reshape(-1, 1))
data = pd.DataFrame(np_scaled)
# train isolation forest
model = IsolationForest(contamination=float(.01))
model.fit(data)
return model.predict(data)
df['anomaly'] = df.groupby('Computer')['Count'].transform(train_isolation_group)
我有一些问题,希望你能帮助我,谢谢!!!!
我有一个 table 看起来像这样:
Computer | Data | Count |
---|---|---|
A | 01/01/2021 | 43 |
A | 02/01/2021 | 64 |
A | 03/01/2021 | 333 |
A | 04/01/2021 | 656 |
B | 01/01/2021 | 41 |
B | 02/01/2021 | 436 |
B | 03/01/2021 | 745 |
B | 04/01/2021 | 234 |
我想运行隔离森林算法只对部分table
我不知道像 df[df['Computer'] == A]['Count'] 那样手动为每台计算机做什么 有大约 500 台不同的计算机。 所以我不知道该怎么做:
scaler = StandardScaler()
np_scaled = scaler.fit_transform(df[df['Computer'] == A]['Count'].values.reshape(-1, 1))
data = pd.DataFrame(np_scaled)
# train isolation forest
model = IsolationForest(contamination=float(.01))
model.fit(data)
df['anomaly'] = model.predict(data)
500 次(对于 A 和 B 以及 C 和更多) 有办法有效地做到这一点 谢谢!!!
结果应该是这样的但是每次检查异常只分别针对A,B分别等等
Computer | Data | Count | anomaly |
---|---|---|---|
A | 01/01/2021 | 43 | 1 |
A | 02/01/2021 | 64 | 1 |
A | 03/01/2021 | 333 | 1 |
A | 04/01/2021 | 656 | -1 |
B | 01/01/2021 | 41 | 1 |
B | 02/01/2021 | 436 | 1 |
B | 03/01/2021 | 745 | 1 |
B | 04/01/2021 | 234 | 1 |
您可以按 Computer
分组并使用 transform
对每个组执行您已有的函数,将与原始索引相同的索引返回到 anomaly
列。
def train_isolation_group(group_count):
scaler = StandardScaler()
np_scaled = scaler.fit_transform(group_count.values.reshape(-1, 1))
data = pd.DataFrame(np_scaled)
# train isolation forest
model = IsolationForest(contamination=float(.01))
model.fit(data)
return model.predict(data)
df['anomaly'] = df.groupby('Computer')['Count'].transform(train_isolation_group)