我有9个csv文件的文件夹(功能x恶意软件样本),每个文件都包含9个恶意软件系列的不同类,并且正在尝试获取每个类的主要组件。
如果您想玩的话,可以获取最小类的csv here的副本–
这些功能来自.asm文件的文本分析。主要是操作码,还有其他一些,例如文件大小,空格数等。
到目前为止,我已经在下面编写了此脚本,该脚本将采用功能所解释的最大方差,并将其添加到总计值中,一旦超过“ 1.0”,就应解释方差的“ 100%”。然后,我可以在那些“主要组件”下画一条线,并说“这些数量”可以解释大多数差异,从而减少了我的主数据集(所有9类恶意软件)的特征空间维度,该总数总计约10,000个恶意软件样本。>
import pandas as pd
from sklearn import preprocessing
from sklearn.decomposition import PCA
import glob
def Pca_on_files():
dl = glob.glob("folder of all 9 classses to be PCA'd")
for i in range(len(dl)):
file = dl[i]
df = pd.read_csv(file)
# Removing Identifier and target varible
df.drop(["filename"], 1 , inplace = True)
df.drop(["malware family"], 1 , inplace = True)
# SCALE THE DATAFRAME: maxabs_scale is best for sparse data
df_scaled = preprocessing.maxabs_scale(df, axis=0, copy=True)
# CREATEING MODEL
pca = PCA(n_components=40, svd_solver='auto') # svd_solver='auto': Automatic selection
pca.fit(df_scaled)
LofExVar = list(pca.explained_variance_) # largest first I think
TotalVarExp = 0.0
count = 0
print("file",file)
for PC in LofExVar :
count += 1
if TotalVarExp < 1.0:
TotalVarExp = TotalVarExp + PC
print("PC{}-VarExp is {}".format(count,PC))
else:
break
Pca_on_files()
我的问题是...
如何在一行中输出 -功能名称(操作码名称,文件大小等) -主成分号 -方差解释值
像我们许多人一样,我仍在学习Python的绳索,并且此脚本中会有一些古怪之处,可以使它更加优雅。我非常欢迎您对此提供建设性的反馈和建议。 :-)
在此先谢谢您的问候