gpt4 book ai didi

python - 使用中位数(而不是均值)使用 sklearn-KN​​N 进行预测

转载 作者:太空狗 更新时间:2023-10-29 23:58:18 25 4
gpt4 key购买 nike

Sklearn-KN​​N 允许在计算 mean x 最近邻时设置权重(例如,均匀、距离)。

是否可以使用中位数(可能使用用户定义的函数)进行预测,而不是使用均值进行预测?

最佳答案

没有内置参数来调整权重以使用中位数而不是均值(您可以看到 in the source 均值是硬编码的)。但是因为 scikit-learn 估计器只是 Python 类,您可以将 KNeighborsRegressor 子类化并覆盖 predict 方法来做任何您想做的事情。

这是一个简单的例子,我复制并粘贴了原始的 predict() 方法并修改了相关部分:

from sklearn.neighbors.regression import KNeighborsRegressor, check_array, _get_weights

class MedianKNNRegressor(KNeighborsRegressor):
def predict(self, X):
X = check_array(X, accept_sparse='csr')

neigh_dist, neigh_ind = self.kneighbors(X)

weights = _get_weights(neigh_dist, self.weights)

_y = self._y
if _y.ndim == 1:
_y = _y.reshape((-1, 1))

######## Begin modification
if weights is None:
y_pred = np.median(_y[neigh_ind], axis=1)
else:
# y_pred = weighted_median(_y[neigh_ind], weights, axis=1)
raise NotImplementedError("weighted median")
######### End modification

if self._y.ndim == 1:
y_pred = y_pred.ravel()

return y_pred

X = np.random.rand(100, 1)
y = 20 * X.ravel() + np.random.rand(100)
clf = MedianKNNRegressor().fit(X, y)
print(clf.predict(X[:5]))
# [ 2.38172861 13.3871126 9.6737255 2.77561858 17.07392584]

我省略了加权版本,因为我不知道使用 numpy/scipy 计算加权中位数的简单方法,但是一旦该函数可用就可以直接添加。

关于python - 使用中位数(而不是均值)使用 sklearn-KN​​N 进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33716395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com