如何将功能名称与“主体”组件(PCA)一起输出?

时间:2018-07-22 12:46:51

标签: python dataframe pca feature-extraction variance

我有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的绳索,并且此脚本中会有一些古怪之处,可以使它更加优雅。我非常欢迎您对此提供建设性的反馈和建议。 :-)

在此先谢谢您的问候

0 个答案:

没有答案