我想实现我的KNN算法。在计算距训练集到每个向量的距离时,我想使用向量化。
class KNN:
def __init__(self, train_data, k_value, decision_column):
self.train_data = train_data
self.k_value = k_value
self.decision_column = decision_column
self.columns = list(self.train_data.columns)
self.columns.remove(decision_column)
def _predict_vector(self, *args):
vector_data = pd.DataFrame(columns=[self.decision_column, 'Distance'])
vector_data[self.decision_column] = self.train_data[self.decision_column]
vector_data['Distance'] = 0
for i, value in enumerate(args):
vector_data['Distance'] += (self.train_data[self.columns[i]] - value) ** 2
# I ignore calculating the square root of distance
vector_data = vector_data.sort_values(by='Distance').iloc[:self.k_value]
vector_data = vector_data[self.decision_column].value_counts().iloc[:1].index.array[0]
return vector_data
def predict_for_dataframe(self, test_data):
test_data['KNN_Prediction'] = self._predict_vector(test_data.values)
我想要我的算法在这里
test_data['KNN_Prediction'] = self._predict_vector(test_data.values)
test_data.values将传递计算距离所需的所有数据 例如。在虹膜数据集中它将是[1.2、4.5、1.6、4.1]
我知道方法_predict_vector可能具有(self,SL,SW,PL,PW)之类的参数(用于鸢尾花),但是我希望我的算法可用于许多其他数据集,因此这就是为什么我使用* args
您能帮我使用向量化吗?