MTH-IDS 读代码(1)

一、Mini Batch K-Means聚类

Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集减少计算时间,同时试图优化目标函数。可以减少K-Means算法收敛时间

● 数据导入以及数据抽样

● 导入

from sklearn.cluster import MiniBatchKMeans

● keans定义

kmeans = MiniBatchKMeans(n_clusters=1000, random_state=0).fit(X) n_clusters = 1000 说明有1000个中心点 (为什么设置1000个中心点?)

● 标签赋值

klabel=kmeans.labels_

● 将kLabel和Label互换位置

cols = list(df_major) cols.insert(78, cols.pop(cols.index('Label'))) df_major = df_major.loc[:, cols] #将表格中列的顺序换成cols的顺序#

● 将结果分组并且按照百分比抽样

def typicalSampling(group): name = group.name frac = 0.008 return group.sample(frac=frac) #按照百分比抽样 result = df_major.groupby('klabel', group_keys=False).apply(typicalSampling) # 输出Label标签的计数结果 result['Label'].value_counts()

● 将抽样结果保存

result = result.drop(['klabel'],axis=1) result = result.append(df_minor) #添加之前的少量样本 result.to_csv('./data/CICIDS2017_sample_km.csv',index=0)

● 数据分割(训练集和测试集)

● 读取数据

df=pd.read_csv('./data/CICIDS2017_sample_km.csv')
● X和Y的选择
X = df.drop(['Label'],axis=1).values #返回给定DataFrame的numpy表示形式 y = df.iloc[:, -1].values.reshape(-1,1) y=np.ravel(y)
● 数据分割(训练集0.8, 测试集0.2)
X_train, X_test, y_train, y_test = train_test_split(X,y, train_size = 0.8, test_size = 0.2, random_state = 0,stratify = y)
● 特征选择
● 互信息法相关过滤性 mutual_info_classif
from sklearn.feature_selection import mutual_info_classif importances = mutual_info_classif(X_train, y_train) # 统计每个特征和标签之间的互信息量,值越大说明越相关
● 计算重要性的和
f_list = sorted(zip(map(lambda x: round(x, 4), importances), features), reverse=True)
round(x,4) :保留四位小数
map(function, iterable) : 将序列中的每个元素作为函数的参数进行计算
zip() : 将对象中的元素打包成一个个tuple,也就是说将两个参数一一对应打包到一起,最后返回一个 iterable(可迭代对象) sorted函数可以对可迭代类型的容器内的数据进行排序 Sum = 0 fs = [] for i in range(0, len(f_list)): Sum = Sum + f_list[i][0] fs.append(f_list[i][1])
● 根据特征相关性排序,累加值达到0.9时跳出

Sum2 = 0 
fs = [] for i in range(0, len(f_list2)):     Sum2 = Sum2 + f_list2[i][0]     fs.append(f_list2[i][1])     if Sum2>=0.9:         break       ```
●	将提取出来的特征赋值
```X_fs = df[fs].values X_fs.shape```

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值