计算距离度量后的返回索引

时间:2018-09-27 18:19:04

标签: python pandas machine-learning similarity

给出具有4个功能和1个索引列的DF:

df = pd.DataFrame(np.random.randint(0,100, size= (100,4)), columns=list('ABCD'))
df['index'] = range(1, len(df) + 1)

我想计算用户输入给定的曼哈顿距离。用户的输入将由a,b,c,d表示。该函数定义如下。

def Manhattan_d(a,b,c,d):

    return (a - df['A']) + (b -df['B']) + (c - df['C']) + (d - df['D'])

当答案返回给我时,它以列表形式出现。现在,我想找到返回给我的最小值并将其链接到索引号。

如果我返回(min(formula)),则会得到一个数字的输出,而无法找到它的原始索引。如果更简单,则索引表示类别。因此,在应用公式后,我需要找到输出最少的类别。

希望如此。

1 个答案:

答案 0 :(得分:1)

也许更好的方法是将曼哈顿距离应用于数据帧的每一行。此时,您可以使用<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306 /sehm5</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <mapping class="com.application.retrain.dto.retrainDto"></mapping> </session-factory> </hibernate-configuration> 在原始数据框中找到与您馈入函数的a,b,c,d点最相似(曼哈顿距离最低)的点的索引。 / p>

.idxmin()

注意:曼哈顿距离需要差值的绝对值,我已将其包括在内。

另一个说明:将所有变量都传递到函数中通常是一个好习惯,这就是为什么我将def Manhattan_d(a,b,c,d, df): return df.apply(lambda row:abs(row['A']-a)+abs(row['B']-b)+abs(row['C']-c)+abs(row['D']-d), axis=1).idxmin() 作为函数输入的原因。

另一种可能性是使用现有的实现,例如Scikit-learn的DistanceMetric类。