Expérience d'exploration de données - Analyse des composantes principales et caractérisation des classes

Ensemble de données et code icon-default.png?t=N7T8https://www.aliyundrive.com/s/ibeJivEcqhm

1. Analyse en composantes principales

1. Objectif expérimental

  • Comprendre l'objectif, le contenu et le processus de l'analyse en composantes principales.

  • Maîtriser l'analyse en composantes principales et être capable de la programmer.

2. Principe expérimental

Le but de l’analyse en composantes principales

L'analyse en composantes principales consiste à transformer les multiples indicateurs d'origine en quelques indicateurs complets bien représentés. Ces quelques indicateurs peuvent refléter la plupart des informations des indicateurs d'origine (plus de 85 %), et chaque indicateur reste indépendant. , pour éviter le chevauchement des informations. . L'analyse en composantes principales joue principalement le rôle de réduction de dimensionnalité et de simplification de la structure des données.

Modèle mathématique de l'analyse en composantes principales

Supposons qu'il y ait p indicateurs dans le problème réel discuté. Traitez ces p indicateurs comme p variables aléatoires, notées X1, X2,...,Xp. L'analyse en composantes principales consiste à transformer le problème de ces p indicateurs en Discuter de m nouveaux indicateurs F1, F2,..., Fm(m<p), qui reflètent pleinement les informations des indicateurs d'origine conformément au principe de conservation de l'essentiel de l'information, et sont indépendants les uns des autres.

La méthode d’analyse en composantes principales consiste à trouver la combinaison linéaire Fi des indicateurs d’origine.

 Remplissez les conditions suivantes :

  • La somme des carrés des coefficients des composantes principales est 1 :

  • Les composants principaux sont indépendants les uns des autres et n’ont aucune information qui se chevauche :

  • Les écarts entre les composantes principales diminuent séquentiellement :

Le processus de résolution des composants principaux

  1. Trouvez la moyenne de l'échantillon \overline{X} et la matrice de covariance de l'échantillon S ;

  2. Retrouver les racines caractéristiques de S\lambda

  3. Trouver le vecteur propre unitaire correspondant à la racine propre

  4. Écrivez l'expression des composantes principales

 Lors de la sélection des composantes principales, les m premières composantes principales sont sélectionnées en fonction du taux de cotisation cumulé.

Principes de sélection :

3. Processus expérimental

Le langage R a une fonction de calcul intégrée pour l'analyse en composantes principales, et il existe également d'autres packages qui peuvent effectuer une analyse en composantes principales. Dans l'expérience, le langage R a été utilisé et la fonction intégrée d'analyse en composantes principales PCA a été utilisée pour effectuer analyse des composants principaux. Ce qui suit prend l'analyse en composantes principales de l'ensemble de données sur le cancer BLCA comme exemple pour illustrer le processus de réalisation de l'analyse en composantes principales. La méthode pour les autres ensembles de données est la même.

(1)Préparation de l'environnement

Installez et importez le package factoextra pour la visualisation d'analyses statistiques multivariées.

options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) 
install.packages("factoextra",dependencies = TRUE)
library(factoextra)

Importez les données.

data <- read.csv('D:\\Files\\文档\\HNU5\\数据挖掘\\数据集\\BLCA\\rna.csv')   

Effectuez une transposition pour que les échantillons soient sur les lignes et que l'attribut (gene_id) soit sur les colonnes.

data <- t(data)

(2) Effectuer une analyse en composantes principales

Utilisez la fonction prcomp intégrée au langage R pour effectuer une analyse en composantes principales :

cancer.pr <- prcomp(data)

La fonction prcomp dans R peut avoir deux paramètres supplémentaires :

  • SCALE : défini sur true pour normaliser les données avant d'effectuer une analyse en composantes principales.

  • RANG : le nombre de composants principaux.

La normalisation est utilisée lorsqu'il existe des dimensions différentes entre les variables. Lors de l'analyse de l'agrégation de ce livre, étant donné que les données sont toutes des valeurs d'expression génique d'échantillons, on suppose que les dimensions sont les mêmes et aucune standardisation n'est effectuée.

Utilisez la fonction sommaire pour visualiser le taux de cotisation de la composante principale :

summary(cancer.pr)

Certains résultats sont les suivants :

Parmi eux, l'écart type représente l'écart type, la proportion de variance représente le taux de cotisation d'une seule composante principale et la proportion cumulative représente le taux de cotisation cumulatif. Selon le principe de sélection des composantes principales, le taux de cotisation cumulé des m composantes principales sélectionnées doit être supérieur à 80 %. On voit donc que les 116 premières composantes principales doivent être sélectionnées. À ce stade, la contribution cumulée Le taux des principales composantes est de 80,15%, ce qui peut refléter l'original La plupart des informations sur l'indicateur.

Lors de la sélection des composants principaux, vous pouvez également générer un éboulis pour visualiser les valeurs de contribution du plus grand au plus petit arrangement :

fviz_eig(cancer.pr, addlabels = TRUE, ylim = c(0, 100))  

On peut voir ici que la valeur de cotisation de la composante principale la plus élevée est de 15 %, et que la plupart des valeurs de cotisation de la composante principale sont relativement faibles. Par conséquent, les 116 premières composantes principales sont nécessaires pour que le taux de cotisation cumulé atteigne 80 %. montre également que les données originales ne peuvent pas être réduites dimensionnellement à de très petites dimensions.

Vous pouvez également dessiner un diagramme de visualisation de corrélation variable. Plus on s'éloigne de l'origine dans le diagramme de corrélation, plus la représentation de la variable par le composant principal PC (corrélation plus forte) est élevée et plus les variables proches sont positivement corrélées.

fviz_pca_var(cancer.pr)

 Il existe également d'autres fonctions de dessin et informations sur les résultats de l'analyse en composantes principales, indiquant la représentativité des composantes principales par rapport aux variables, la contribution de chaque variable à une composante principale spécifique, etc. Ici, puisque la dimension des données est encore très élevée après la analyse en composantes principales, ce n’est pas faire une analyse pertinente.

(4) Calculer les données des composantes principales

L'analyse en composantes principales joue principalement le rôle de réduction de dimensionnalité et de simplification de la structure des données. Après avoir résolu les composantes principales ci-dessus, il a été déterminé que les 20 premières composantes principales peuvent être conservées et que seules les valeurs des composantes principales de chaque échantillon doivent être calculées. Après cela, l'analyse des données ne doit être basée que sur sur les données des composantes principales, et il n’est pas nécessaire d’utiliser les données originales. Enfin, les résultats sont exportés pour compléter l’analyse en composantes principales des données.

cancer.pca <- predict(cancer.pr)[,1:116]
write.table (cancer.pca, file ="D:\\Files\\文档\\HNU5\\数据挖掘\\数据集\\BLCA\\pca.csv", sep =",", row.names =TRUE, col.names =TRUE, quote =TRUE)

Pour les échantillons après analyse en composantes principales, une visualisation des coordonnées peut être effectuée :

fviz_pca_ind(cancer.pr)#score

 Pour les ensembles de données de différents types de cancer, après analyse en composantes principales :

taper Nombre de composants principaux Taux de cotisation cumulatif
BLCA 116 80,15%
BRCA 212 80,072%
KIRC 114 80,125%
ARGILE 140 80,099%
CHEMIN 45 80,15%

4. Analyse des résultats expérimentaux

Après avoir effectué une analyse en composantes principales sur différents ensembles de données, la dimensionnalité des données est considérablement réduite, ce qui reflète le rôle de l'analyse en composantes principales dans la réduction de la dimensionnalité des données. Cependant, de nombreuses composantes principales doivent encore être retenues pour répondre à l'exigence d'un taux de cotisation cumulatif de 80 %, ce qui reflète la complexité des données. Les ensembles de données individuels après analyse en composantes principales n'avaient pas les mêmes propriétés, et il n'était pas clair comment comparer les données après analyse en composantes principales pour différents types de cancer, de sorte qu'elles n'ont pas été complétées.

2. Description du concept de classe et analyse de la caractérisation

1. Objectif expérimental

  • Comprendre le but, le contenu et le processus de caractérisation de classe et d'analyse comparative de classe.

  • Caractérisation de classe de maître et analyse comparative de classe, et être capable de la mettre en œuvre en programmation.

  • Maîtrisez l’analyse de corrélation d’attributs et mettez en œuvre une analyse de corrélation d’attributs basée sur le gain d’informations.

2. Principe expérimental

Caractérisation de classe et analyse comparative de classe

La description de concept (classe) est la forme la plus élémentaire d’exploration de données descriptives. Les descriptions de classe comprennent des caractéristiques de classe et des comparaisons.

  • Caractérisation de classe : regrouper et décrire un ensemble de données appelé classe cible.

  • Contraste de classe (comparaison) : résumer et différencier un ensemble de données appelé classe cible d'autres ensembles de données appelés classes de comparaison.

Analyse de corrélation d'attributs

  • En identifiant les attributs non pertinents ou faiblement pertinents et en les excluant du processus de description du concept, nous déterminons quels attributs doivent être inclus dans la caractérisation et la comparaison des classes.

  • L'idée de base de l'analyse de corrélation d'attributs est de calculer une mesure qui quantifie la corrélation d'un attribut avec une classe ou un concept donné. Les mesures qui peuvent être adoptées incluent le gain d'informations, l'incertitude et le coefficient de corrélation.

gain d'informations

Le gain d'informations obtient le gain d'informations d'un attribut en calculant les informations attendues d'une classification d'échantillon et l'entropie de l'attribut, et détermine la pertinence de l'attribut pour la tâche de caractérisation actuelle.

Le gain d'information est calculé comme suit :

S est un ensemble d'échantillons d'apprentissage dans lequel le numéro de classe de chaque ensemble est connu. Chaque échantillon est un tuple. Il existe un attribut pour déterminer le numéro de classe d'un certain échantillon de formation.

Supposons qu'il y ait m classes dans S, un total de S échantillons d'apprentissage et que chaque classe Ci a des échantillons Si. Alors la probabilité qu'un échantillon appartienne à la classe Ci est Si/S. Alors l'information attendue utilisée pour classer un échantillon donné est :

 Un attribut A{a1,a2,...,av} avec v valeurs peut diviser S en v sous-ensembles {S1, S2,...,Sv}, où Sj contient la valeur aj sur S.Al'attribut Supposons que Sj contienne des échantillons sij de classe Ci. L’information attendue selon cette division de A est appelée l’entropie de A.

 Le gain d'information obtenu par cette division sur A est défini comme :

 Les attributs avec un gain d'information élevé sont des attributs avec une forte discriminabilité dans un ensemble donné. Par conséquent, le classement de corrélation d’un attribut peut être obtenu en calculant le gain d’information de chaque attribut de l’échantillon dans S. Il est possible d'identifier les attributs non pertinents ou peu pertinents et de les exclure du processus de description du concept.

Le processus de caractérisation de classe, y compris l'analyse de corrélation d'attributs

  • collecte de données

    • Collectez les données pertinentes dans la base de données via le traitement des requêtes et divisez-les en une classe cible et une ou plusieurs classes de comparaison.

  • analyse de pré-corrélation

    • Identifier des collections d'attributs et de dimensions

    • Supprimer ou généraliser les attributs qui ont un grand nombre de valeurs différentes

    • Générer des relations avec les candidats

  • Supprimez les attributs non pertinents et faiblement corrélés à l'aide de mesures d'analyse de corrélation sélectionnées.

    • Évaluer chaque attribut d'une relation candidate à l'aide d'une métrique d'analyse de corrélation (gain d'informations)

    • Trier les attributs en fonction de la pertinence calculée

    • Les attributs non pertinents et faiblement pertinents en dessous de la valeur critique sont supprimés

    • Générer une relation de travail initiale avec la classe cible

  • générer des descriptions de concepts

Le processus d'analyse de comparaison de classes, y compris l'analyse de corrélation d'attributs

Le processus d’analyse comparative des classes est le suivant :

  • collecte de données:

Collectez les données pertinentes dans la base de données via le traitement des requêtes et divisez-les en une classe cible et une ou plusieurs classes de comparaison.

  • Analyse de corrélation dimensionnelle :

Utilisez des méthodes d'analyse de corrélation d'attributs pour inclure uniquement les dimensions fortement corrélées dans notre tâche.

  • généralisation simultanée

Généralisez simultanément sur la classe cible et la classe de contraste pour obtenir la relation/cube de classe cible principale et la relation/cube de classe de comparaison principale.

  • Exporter une représentation de la comparaison

Utilisez des techniques de visualisation pour exprimer des descriptions de comparaison de classes, qui incluent généralement des mesures de « contraste » qui reflètent la comparaison entre la classe cible et la classe de comparaison.

3. Processus expérimental

Utilisez l'analyse de corrélation d'attributs pour effectuer une caractérisation de classe et une analyse de comparaison de classes, et utilisez le langage Python pour terminer la mise en œuvre de la programmation.

(1)Collecte de données

En utilisant l'ensemble de données fourni pour la caractérisation des classes et l'analyse de comparaison des classes, trois types de cancer, BLCA, BRCA et KIRC, ont été sélectionnés pour analyse. Parmi eux, BLCA est sélectionné comme classe cible, et BRCA et KIRC sont sélectionnés comme classe de comparaison. Les trois ensembles de données d'origine sont utilisés directement ici sans traitement. Les données seront traitées selon les besoins lors de l'analyse liée aux attributs.

(2) Analyse de pré-corrélation

Cette étape nécessite de supprimer ou de généraliser des attributs avec un grand nombre de valeurs différentes et doit être aussi prudente que possible afin de conserver davantage d'attributs pour une analyse ultérieure. Pour l'ensemble de données sur les gènes du cancer, chaque attribut est un gène et il est difficile de décider quel attribut peut être supprimé. Certains attributs peuvent grimper en fonction de concepts, mais cela nécessite une connaissance professionnelle de l'information génétique. Par exemple : on observe que certains identifiants de gènes ont le même préfixe, comme CXCL11|6373, CXCL14|9547. Après avoir interrogé les données, il s'avère que CXC est un motif codant pour des protéines de chimiokine, de sorte que les attributs peuvent être grimpés vers le haut en fonction sur le concept (tout d'abord, ce n'est que lorsque la valeur des données originales est généralisée en une seule étape qu'une généralisation vers le haut peut être effectuée).

Étant donné qu'il y a trop d'attributs dans l'ensemble de données et qu'il est difficile de supprimer ou de fusionner des tuples généralisés égaux, aucun attribut n'est supprimé ou généralisé en fusionnant ici. Au lieu de cela, nous faisons la généralisation la plus élémentaire, c'est-à-dire généralisons la valeur de chaque gène dans l'ensemble de données d'origine en un niveau et divisons la plage des données d'origine pour distinguer différents niveaux. Ceci est similaire à la généralisation de GPA lors de l'exploration de l'ensemble des données générales. caractéristiques des étudiants diplômés.Selon GPA des gradations en tant que hiérarchies conceptuelles.

Il devrait y avoir une norme pour généraliser les valeurs de l'ensemble de données en utilisant la division par intervalles. Semblable à un score inférieur à 60, il peut être classé comme échec, et au-dessus de 85, il peut être classé comme excellent. Cette norme doit être basée sur la signification des données. Dans l'ensemble de données sur le cancer, cette valeur doit être déterminée par des professionnels qui comprennent les données. Ceci est uniquement pour pratiquer et se familiariser avec la caractérisation de classe et l'analyse comparative de classe. Par conséquent, les données sont simplement divisées en intervalles égaux et la valeur maximale des données dans les trois ensembles de données se trouvent des valeurs et des valeurs minimales, divisées en intervalles équidistants. Cette étape est relativement simple et peut être complétée directement dans le tableau EXCEL. Le plus grand ensemble de données dans les trois catégories de cancer est de 4,62 et le plus petit est de -1,85. Il est divisé en 6 intervalles et la longueur de chaque intervalle est de 1,08. Utilisez un programme python pour terminer la généralisation et enregistrez-la dans un fichier.

Le code de base est le suivant :

step = 1.08 
base_value = -1.86
base_path = "./属性概化结果"
# 对数据进行基本概化,将值概化为不同分级
def generalize(file_path:str):
    file_name = os.path.basename(file_path)                             #文件名
    output_path = os.path.join(base_path,file_name)                     #保存结果
    df = pd.read_csv(file_path,index_col="gene_id")
    df = pd.DataFrame(df.values.T,index=df.columns,columns=df.index)    #进行转置
    labels = list(df.columns.values)                                    #gene_id
    for index,row in df.iterrows():
        for gene_id in labels:    
            for i in range(0,6):
                if row[gene_id]>base_value+i*step and row[gene_id]<base_value+(i+1)*step:
                    row[gene_id] = i
                    break
    df.to_csv(output_path)

Le résultat est obtenu sous la forme suivante :

 (3) Analyse de corrélation d'attributs basée sur le gain d'informations

Après avoir terminé la généralisation des attributs ci-dessus, calculez le gain d'informations de chaque attribut et supprimez les attributs non pertinents ou non pertinents.

Afin de faciliter le calcul du gain d'information, des statistiques sont d'abord établies sur les données généralisées, et le nombre d'échantillons avec des valeurs de division différentes pour chaque gène est compté :

base_path = "./类特征化与对比分析数据"
def pre(file_path):
    file_name = os.path.basename(file_path)
    output_path = os.path.join(base_path,file_name)
    df = pd.read_csv(file_path,index_col=0)
    labels = list(df.columns.values) 
    data = {}
    for gene_id in labels:
        data[gene_id] = [0,0,0,0,0,0]
    for index,row in df.iterrows():
        for gene_id in labels: 
            data[gene_id][int(row[gene_id])] +=1 
    newdf = pd.DataFrame(data)
    newdf.to_csv(output_path)
    
def main():
    # 数据统计
    pre("./属性概化数据/BLCArna.csv")
    pre("./属性概化数据/BRCArna.csv")
    pre("./属性概化数据/KIRCrna.csv")

Après avoir effectué les statistiques ci-dessus, les données statistiques se présenteront sous la forme suivante :

Les informations attendues pour classer un échantillon donné sont calculées comme suit :

 Supposons que les informations attendues pour la classification du gène A soient calculées. Il existe trois catégories au total, alors s1, s2 et s3 sont le nombre d'échantillons des trois catégories sur le gène A. Le calcul est le suivant :

# 计算分类一个给定样本的期望信息
def I(s:list)->float:
    sum_s = 0                                               
    res_I = 0.0
    for si in s:
        sum_s += s
    for si in s:                                    
        if si>0:
            res_I += -(si/sum_s * math.log(si/sum_s,2)) 
    return res_I

Si l'échantillon est divisé en v sous-ensembles basés sur le gène A, calculez les informations attendues requises pour la classification de l'échantillon donné (l'entropie de A) :

Le gain d'information obtenu par cette division sur A est :

 Afin de faciliter le traitement des données, le calcul de E(A) est inclus dans le calcul de Gain(A). Le calcul complet est mis en œuvre comme suit :

def main():
    # 数据统计
    pre("./属性概化数据/BLCArna.csv")
    pre("./属性概化数据/BRCArna.csv")
    pre("./属性概化数据/KIRCrna.csv")
    df1 = pd.read_csv("./类特征化与对比分析数据/BLCArna.csv",index_col=0)
    df2 = pd.read_csv("./类特征化与对比分析数据/BRCArna.csv",index_col=0)
    df3 = pd.read_csv("./类特征化与对比分析数据/KIRCrna.csv",index_col=0)
    result_path = "./类特征化与对比分析数据/Gain.csv"
    # 计算每个属性的信息增益
    labels = list(df1.columns.values)               # 取出gene_id,接下来计算每个gene_id的信息增益
    result = {}
    for gene_id in labels:
        gain = 0
        # 先计算I(s1,s2,s3)
        s = [0,0,0]
        for i in range(6):
            s[0] += df1[gene_id][i]
            s[1] += df2[gene_id][i]
            s[2] += df3[gene_id][i]
        I_s = I(s)                                  # 该基因整体对样本分类的期望信息
        sum_s = s[0]+s[1]+s[2]                      # 该基因样本总数
        # 计算E(gene_id)
        E = 0
        for i in range(6):
            s1i = df1[gene_id][i]
            s2i = df2[gene_id][i]
            s3i = df3[gene_id][i]
            silist = [s1i,s2i,s3i]
            E += I(silist) * ((s1i+s2i+s3i)/sum_s)  # 基因不同子集对样本分类的期望信息加权和即为属性的熵
        gain = I_s - E                              # 该基因的信息增益
        result[gene_id] = gain
    resultdf = pd.DataFrame(result,index=["gain"])
    # 转置,行为基因,列为信息增益
    resultdf = pd.DataFrame(resultdf.values.T,index=resultdf.columns,columns=resultdf.index) 
    # 按信息增益从小到大排序
    resultdf=resultdf.sort_values(by='gain',axis=0,ascending=True)                              
    resultdf.to_csv(result_path)

Le gain d’informations une fois le calcul terminé est le suivant :

Après avoir obtenu le gain d'informations de chaque attribut, les attributs non pertinents et faiblement liés peuvent être supprimés sur la base du gain d'informations. Pour définir la valeur critique d'une corrélation non pertinente et faible, si le nombre total d'attributs est petit, la valeur critique peut être réduite pour conserver plus d'attributs ; s'il existe de nombreux attributs comme cet ensemble de données, il peut être nécessaire de définir la valeur critique. value Agrandissez-le, supprimez un grand nombre d'attributs faiblement corrélés et conservez autant que possible les attributs fortement corrélés.

Dessinez un tracé de densité simple pour observer le gain d'informations des attributs :

df = pd.read_csv("./类特征化与对比分析数据./gain.csv",index_col=0)
df.plot.kde()

 On peut observer que le gain d'information de la plupart des attributs est très faible, inférieur à 0,25. Par conséquent, une valeur critique de 0,25 peut supprimer la plupart des attributs faiblement pertinents et non pertinents. Étant donné que la dimension de l'ensemble de données lui-même est très grande et qu'il existe de nombreux attributs, il reste encore de nombreux attributs après avoir supprimé les attributs faiblement corrélés et non pertinents. Dans l'analyse comparative suivante, seuls les attributs fortement corrélés seront comparés et analysés, donc non des détails spécifiques seront pris ici. Les attributs de valeur critique ont été supprimés.

(4) Caractérisation et analyse comparative

Après avoir terminé la généralisation des attributs et l'analyse de corrélation des attributs ci-dessus, la caractérisation finale et l'analyse comparative peuvent être effectuées. Des règles de quantification peuvent être adoptées et t_weight est utilisé pour représenter la typicité des tuples dans la relation de généralisation principale.

 Seuls les trois attributs présentant le plus grand gain d'informations dans l'analyse de corrélation d'attributs sont utilisés pour dériver une représentation généralisée et une représentation comparative.

result_path = "./类特征化与对比分析数据/characterize_discriminate.csv"
def main():
    df = pd.read_csv("./类特征化与对比分析数据./gain.csv",index_col=0)
    # 取信息增益最高的3个属性
    gene_id = list(df.index[-3:-1])
    gene_id.append(df.index[-1])    
    # 导出概化和比较的表示
    data_count("./属性概化数据/BLCArna.csv",gene_id)
    data_count("./属性概化数据/BRCArna.csv",gene_id)
    data_count("./属性概化数据/KIRCrna.csv",gene_id)
            
def data_count(file_name,gene_id):                     
    # 导出概化的表示
    df = pd.read_csv(file_name,index_col=0)
    # 原数据只保留指定的属性,然后进行count,这里只保留3个强相关属性
    df = df[gene_id]
    count = {}
    total = len(df)
    cols = gene_id.copy()                                   
    cols.append('count')                                        # 保存count列
    newdf = pd.DataFrame(columns=cols)                          # 结果
    for row in df.iterrows():
        item = tuple(row[1][gene_id])                           # item即为这三个属性的一种取值组合
        if item not in count:
            count[item] = 1
        else:
            count[item] += 1
    for key,value in count.items():                             # 保存结果到文件
        n_row = list(key)
        n_row.append("%.2f%%" % (round(value/total,4)*100))
        newdf.loc[len(newdf)] = n_row
    newdf.to_csv(result_path,index = False, mode = 'a')

Les résultats exportés sont les suivants, de haut en bas, les résultats de représentation généralisée de BLCA, BRCA et KIRC :

Principaux résultats de généralisation de la classe cible BLCA :

 Les caractéristiques distinctives de la classe cible et de la classe de comparaison dans la description de comparaison de classe peuvent également être exprimées par des règles quantitatives, c'est-à-dire des règles de distinction quantitative :

 Ceci est similaire à la façon dont t_weight est calculé dans la caractérisation de classe, sauf que le rapport d'un tuple dans la relation de travail initiale de la classe cible au nombre total de tuples de ce type dans la relation de travail entre la classe cible et la classe de comparaison est calculé. . La mise en œuvre est la suivante :

def d_weight(gene_id):
    # 计算d_weight,需要用到三个数据集中的数据
    df1 = pd.read_csv("./属性概化数据/BLCArna.csv",index_col=0)
    df2 = pd.read_csv("./属性概化数据/BRCArna.csv",index_col=0)
    df3 = pd.read_csv("./属性概化数据/KIRCrna.csv",index_col=0)
    # 保留指定属性
    df1 = df1[gene_id]
    df2 = df2[gene_id]
    df3 = df3[gene_id]
    count = {}
    # 这里和特征化的过程是类似的,但是需要注意count的含义不同了,计算的是d_weight,此外结果还有一列为类型
    cols = gene_id.copy()                                   
    cols.append('count')                                        # count列
    cols.insert(0,'type')                                       # 增加一个类型列
    newdf = pd.DataFrame(columns=cols)
    # 计算d_weight,先各个类的概化元组数
    for row in df1.iterrows():
        item = tuple(row[1][gene_id])                         
        if item not in count:
            count[item] = [1,0,0]                               # 三个值表示目标类,两个对比类的该种元组数
        else:
            count[item][1] += 1
    for row in df2.iterrows():
        item = tuple(row[1][gene_id])                         
        if item not in count:
            count[item] = [0,1,0]                               # 对比类的概化元组
        else:
            count[item][1] += 1
    for row in df3.iterrows():
        item = tuple(row[1][gene_id])                         
        if item not in count:
            count[item] = [0,0,1]
        else:
            count[item][2] += 1
    # 计算d_weight
    for key,value in count.items():                             # 保存结果到文件
        n_row = list(key)
        sum_num = value[0]+value[1]+value[2]                    # 总元组数
        n_row1 = n_row.copy()
        n_row2 = n_row.copy()
        n_row3 = n_row.copy()
        n_row1.append("%.2f%%" % (round(value[0]/sum_num,4)*100))
        n_row2.append("%.2f%%" % (round(value[1]/sum_num,4)*100))
        n_row3.append("%.2f%%" % (round(value[2]/sum_num,4)*100))
        n_row1.insert(0,"BLCA")
        n_row2.insert(0,"BRCA")
        n_row3.insert(0,"KIRC")
        newdf.loc[len(newdf)] = n_row1
        newdf.loc[len(newdf)] = n_row2
        newdf.loc[len(newdf)] = n_row3
    newdf.to_csv("./类特征化与对比分析数据/d_weight.csv",index = False)

Le résultat est sous la forme :

 Une valeur de compte plus élevée (c'est-à-dire d_weight) indique que le concept représenté par le tuple généralisé provient principalement de la classe cible. Cependant, dans le jeu de résultats final, la valeur d_weight de la classe cible BLCA n'est pas très élevée. Au lieu de cela, la valeur d_weight des classes de comparaison BRCA et KIRC est proche de 100 % sur de nombreux tuples généralisés, ce qui peut signifier que les caractéristiques du la classe de comparaison est plus évidente.

4. Analyse des résultats expérimentaux

Concernant les résultats de l'analyse de caractérisation, les caractéristiques de la classe cible BLCA ne semblent pas évidentes et le t_weight du tuple généralisé est généralement faible. Dans les catégories de comparaison BRCA et KIRC, certaines valeurs t_weight sont très élevées. Par exemple, les niveaux de BRCA sur ces trois attributs sont 0,1,0 (0 correspond aux données d'origine -1,85~-0,77, et 1 correspond par rapport aux données originales -0,77 ~0,31), les échantillons représentent 60 % du total des échantillons, ce qui peut être considéré comme une caractéristique importante de cette catégorie. Enfin, l'utilisation de règles de distinction quantitative pour l'analyse de comparaison de classes est similaire à la caractérisation de classe. Le d_weight de la classe cible n'est pas grand, alors que la classe de comparaison a un d_weight significatif sur certains tuples généralisés. Ces tuples généralisés peuvent clairement distinguer la classe cible. Les classes se distinguent des classes contrastées.

Certaines simplifications lors du traitement peuvent avoir un impact sur les résultats. Par exemple, lors de la généralisation des attributs, les valeurs sont divisées en intervalles. Cette division divise directement les valeurs maximales et minimales en valeurs équivalentes. En fait, cela peut simplement diviser la plage des caractéristiques en deux parties conduit à des résultats inexacts.

3. Résumé de l'expérience

Grâce à cette expérience, nous avons approfondi notre compréhension de l'analyse en composantes principales, de la caractérisation des classes et de l'analyse contrastive des classes de la description des concepts, et nous les avons mis en œuvre. Le principal problème avec la première question est qu'il y a trop de gènes, ce qui est beaucoup plus grand que la taille de l'échantillon. Les résultats de l'analyse en composantes principales sont encore très volumineux. Il n'est pas sûr que les résultats de l'analyse en composantes principales soient meilleurs si la les échantillons sont suffisants. Après l’analyse en composantes principales, nous ne savons toujours pas comment traiter ou analyser les résultats. La deuxième question concerne principalement la réalisation de la caractérisation des classes et de l'analyse comparative des classes, la partie la plus importante étant l'analyse de corrélation des attributs. Dans le processus de mise en œuvre, il s'est principalement concentré sur l'apprentissage et la tentative d'analyse des méthodes et des étapes. De nombreux processus ont été simplifiés et déraisonnables. Par exemple, la division par intervalles des valeurs lors du prétraitement a été utilisée pour généraliser les attributs. En fin de compte, seuls trois paramètres obtenus sur la base du gain d'informations calculé ont été utilisés.La caractérisation des classes et l'analyse de comparaison des classes sont effectuées sur des attributs fortement corrélés. Bien qu'il existe encore de nombreux problèmes (problèmes avec le processus lui-même, manque de compétences en matière d'affichage visuel des données, etc.), le processus d'analyse a été complété de manière relativement complète par des expériences, et le but et les étapes de l'analyse en composantes principales, de la caractérisation des classes et l’analyse comparative des classes a été comprise.

Je suppose que tu aimes

Origine blog.csdn.net/Aaron503/article/details/127595164
conseillé
Classement