Die meisten effizienten Art und Weise zu konstruieren-ähnlichkeit-matrix

Bin ich über die folgenden links, um eine "euklidische Ähnlichkeit Matrix" (die ich konvertieren, um ein DataFrame).
https://stats.stackexchange.com/questions/53068/euclidean-distance-score-and-similarity
http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.distance.euclidean.html

Den Weg, die ich mache es ist ein iterativer Ansatz, der funktioniert, aber es dauert eine Weile, wenn die Datensätze groß. Die pd-pandas.DataFrame.corr() ist wirklich schnell und hilfreich für pearson-Korrelationen.

Wie kann ich eine euklidische Ähnlichkeit Maßnahme w/o erschöpfend iteration?

Meine naive folgenden code:

#Euclidean Similarity

#Create DataFrame
DF_var = pd.DataFrame.from_dict({"s1":[1.2,3.4,10.2],"s2":[1.4,3.1,10.7],"s3":[2.1,3.7,11.3],"s4":[1.5,3.2,10.9]}).T
DF_var.columns = ["g1","g2","g3"]
#      g1   g2    g3
# s1  1.2  3.4  10.2
# s2  1.4  3.1  10.7
# s3  2.1  3.7  11.3
# s4  1.5  3.2  10.9

#Create empty matrix to fill
M_euclid = np.zeros((DF_var.shape[1],DF_var.shape[1]))

#Iterate through DataFrame columns to measure euclidean distance
for i in range(DF_var.shape[1]):
    u = DF_var[DF_var.columns[i]]
    for j in range(DF_var.shape[1]):
        v = DF_var[DF_var.columns[j]]
        #Euclidean distance -> Euclidean similarity
        M_euclid[i,j] = (1/(1+sp.spatial.distance.euclidean(u,v)))
DF_euclid = pd.DataFrame(M_euclid,columns=DF_var.columns,index=DF_var.columns)

#           g1        g2        g3
# g1  1.000000  0.215963  0.051408
# g2  0.215963  1.000000  0.063021
# g3  0.051408  0.063021  1.000000
InformationsquelleAutor O.rka | 2016-03-02
Schreibe einen Kommentar