如何从 pandas DataFrame 中找到三个最接近的值?
How to find from a pandas DataFrame the three closest values?
我有一个包含不同情绪的数据框,每种情绪都是一个类别,具有三个不同的浮点值。我想找到最接近的情感给出三个值。
示例:
df_emotional = pd.DataFrame({
'Category' : ['anger', 'disgust', 'fear', 'guilt', 'joy', 'negative', 'positive', 'sadness', 'shame'],
'n1' : [0.167, 0.052, 0.073, 0.208, 0.980, 0.102, 0.959, 0.052, 0.060],
'n2' : [0.865, 0.775, 0.840, 0.567, 0.824, 0.527, 0.510, 0.288, 0.670],
'n3' : [0.657, 0.317, 0.293, 0.206, 0.794, 0.176, 0.855, 0.164, 0.155]
})
def closest_values(df, n1, n2, n3):
n1_res = min(df, key=lambda x: abs(x - n1))
...
return emotion
# Expected output
closest_values(df_emotional, n1=0.161, n2=0.991, n3=0.632)
output: anger
这里是一个用KNN方法实现的解决方案。请注意,我没有应用任何机器学习最佳实践,例如测试和训练拆分等。如果您有更大的数据集,则可以实施。基本上 Knn 计算行之间的 euclidean_distance 并选择最近的一个(你可以增加这个值)来决定类别。
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
df_emotional = pd.DataFrame({
'Category' : ['anger', 'disgust', 'fear', 'guilt', 'joy', 'negative', 'positive', 'sadness', 'shame'],
'n1' : [0.167, 0.052, 0.073, 0.208, 0.980, 0.102, 0.959, 0.052, 0.060],
'n2' : [0.865, 0.775, 0.840, 0.567, 0.824, 0.527, 0.510, 0.288, 0.670],
'n3' : [0.657, 0.317, 0.293, 0.206, 0.794, 0.176, 0.855, 0.164, 0.155]
})
X = df_emotional.iloc[:, 1:]
y = df_emotional.iloc[:, 0]
clf = KNeighborsClassifier(n_neighbors=1) #nearest 1 neighbor.
clf.fit(X,y)
clf.predict([[0.161, 0.991, 0.632]])
#Output:
array(['anger'], dtype=object)
注意:您可以保存您的 clf 方法以供将来预测以获取更多信息:Model Persistence
我有一个包含不同情绪的数据框,每种情绪都是一个类别,具有三个不同的浮点值。我想找到最接近的情感给出三个值。
示例:
df_emotional = pd.DataFrame({
'Category' : ['anger', 'disgust', 'fear', 'guilt', 'joy', 'negative', 'positive', 'sadness', 'shame'],
'n1' : [0.167, 0.052, 0.073, 0.208, 0.980, 0.102, 0.959, 0.052, 0.060],
'n2' : [0.865, 0.775, 0.840, 0.567, 0.824, 0.527, 0.510, 0.288, 0.670],
'n3' : [0.657, 0.317, 0.293, 0.206, 0.794, 0.176, 0.855, 0.164, 0.155]
})
def closest_values(df, n1, n2, n3):
n1_res = min(df, key=lambda x: abs(x - n1))
...
return emotion
# Expected output
closest_values(df_emotional, n1=0.161, n2=0.991, n3=0.632)
output: anger
这里是一个用KNN方法实现的解决方案。请注意,我没有应用任何机器学习最佳实践,例如测试和训练拆分等。如果您有更大的数据集,则可以实施。基本上 Knn 计算行之间的 euclidean_distance 并选择最近的一个(你可以增加这个值)来决定类别。
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
df_emotional = pd.DataFrame({
'Category' : ['anger', 'disgust', 'fear', 'guilt', 'joy', 'negative', 'positive', 'sadness', 'shame'],
'n1' : [0.167, 0.052, 0.073, 0.208, 0.980, 0.102, 0.959, 0.052, 0.060],
'n2' : [0.865, 0.775, 0.840, 0.567, 0.824, 0.527, 0.510, 0.288, 0.670],
'n3' : [0.657, 0.317, 0.293, 0.206, 0.794, 0.176, 0.855, 0.164, 0.155]
})
X = df_emotional.iloc[:, 1:]
y = df_emotional.iloc[:, 0]
clf = KNeighborsClassifier(n_neighbors=1) #nearest 1 neighbor.
clf.fit(X,y)
clf.predict([[0.161, 0.991, 0.632]])
#Output:
array(['anger'], dtype=object)
注意:您可以保存您的 clf 方法以供将来预测以获取更多信息:Model Persistence