2017-06-15 6 views
0

Ich verfolge den Code auf diesen link das Ähnlichkeitsmaß zwischen dem Eingang X und Y zu finden:Wie finden Sie Ähnlichkeitsmaß zwischen zwei Sätzen mit Simple Matching Coefficient?

def similarity(X, Y, method): 
    X = np.mat(X) 
    Y = np.mat(Y) 
    N1, M = np.shape(X) 
    N2, M = np.shape(Y) 

    method = method[:3].lower() 
    if method=='smc': # SMC 
     X,Y = binarize(X,Y); 
     sim = ((X*Y.T)+((1-X)*(1-Y).T))/M 
    return sim 

def binarize(X,Y=None): 
    ''' Force binary representation of the matrix, according to X>median(X) ''' 
    if Y==None: 
     X = np.matrix(X) 
     Xmedians = np.ones((np.shape(X)[0],1)) * np.median(X,0) 
     Xflags = X>Xmedians 
     X[Xflags] = 1; X[~Xflags] = 0 
     return X 
    else: 
     X = np.matrix(X); Y = np.matrix(Y); 
     XYmedian= np.median(np.bmat('X; Y'),0) 
     Xmedians = np.ones((np.shape(X)[0],1)) * XYmedian 
     Xflags = X>Xmedians 
     X[Xflags] = 1; X[~Xflags] = 0 
     Ymedians = np.ones((np.shape(Y)[0],1)) * XYmedian 
     Yflags = Y>Ymedians 
     Y[Yflags] = 1; Y[~Yflags] = 0 
     return [X,Y] 

Es ist jedoch davon aus, dass der Eingang X und Y jeweils N1 * M und N2 * M dimensionale Matrizen sein sollten. Ich bin verwirrt, wie ich meine Eingabe, die Sätze variabler Länge sind, in das erforderliche Eingabeformat konvertieren kann.

Auch wäre ich dankbar, wenn jemand mir eine andere Methode vorschlagen könnte, um das gleiche zu finden.

+0

können Sie einige Beispieldaten posten? –

Antwort

0

Wie wäre es damit:

import pandas as pd 
df1=pd... #I'd like to see how you generate your data 
df2=pd... 
cols_common=list(set(df1.columns).intersection(df2.columns)) 
df1=df1[cols_common] 
df2=df2[cols_common] 
result=similarity(df1,df2,'smc') 

Natürlich setzt dieser Ansatz, dass die beiden Tabellen eine oder mehr Spalten gemeinsam haben. Sie könnten auch Spalten aus dem größeren Dataframe beliebig löschen, aber ich würde dies nicht empfehlen, ohne Ihren Anwendungsfall zu kennen

Verwandte Themen