學習筆記(二):使用K近鄰演算法檢測Web異常操作
阿新 • • 發佈:2018-11-10
使用全量比較,而不是最頻繁和最不頻繁的比較。
1.資料蒐集
我們使用詞集的模型,將全部命令去重後形成一個大型向量空間,每個命令代表一個特徵,首先通過遍歷全部命令,生成對應詞集。
with open(filename) as f:
for line in f:
line = line.strip('\n')
dist.append(line)
fdist = FreqDist(dist).key()
2.特徵化
使用詞集將操作命令向量化。
def get_user_cmd_feature_new(user_cmd_list,dist): user_cmd_feature=[] for cmd_list in user_cmd_list: v=[0]*len(dist) for i in range(0,len(dist)): if dist[i] in cmd_list: v[i] += 1 user_cmd_feature.append(v) return user_cmd_featrue
3.訓練模型
user_cmd_list,dist = load_user_cmd_new("..")
user_cmd_featrue = get_user_cmd_feature_new(user_cmd_list,dist)
labels = get_label("...",2)
y = [0]*50+labels
neigh =KneightborsClassifier(n_neighbors = 3)
4.效果驗證
使用交叉驗證,10次取樣和驗證,提高驗證可信度。
cross_validation.cross_val_score(neight, user_cmd_feature, y, n_jobs=-1, cv=10)
準確率達到93%