Tim*_*ael 2 python algorithm machine-learning scikit-learn
我在python中有这样的代码与房价数据集:
from sklearn.datasets import load_boston
from sklearn.neighbors import KNeighborsRegressor
from sklearn.preprocessing import scale
boston = load_boston()
y = boston.target
X = scale(boston.data)
knn = KNeighborsRegressor(n_neighbors=5, weights='distance', metric='minkowski', p=1)
knn.fit(X, y)
Run Code Online (Sandbox Code Playgroud)
现在我可以预测目标属性,在这种情况下是它的价格:
knn.predict([-0.41771335, 0.28482986, -1.2879095 , ..., -1.45900038,
0.44105193, -1.0755623 ])
Run Code Online (Sandbox Code Playgroud)
据我所知,这个算法应该为每个属性找到权重以产生距离函数.我在哪里可以找到每个属性的计算权重?我想知道什么属性与房价有最强的相关性.
您实际上通过metric参数指定权重.
首先,您的问题详细信息略有不正确.该算法没有找到距离函数 - 您为其提供计算距离的度量,以及根据这些距离计算权重的函数.您正在使用默认距离度量,根据文档,它只是好的欧几里德距离.
权重计算为距离的倒数(也写在文档中),因此您可以手动查找给定点的k个邻居,并使用build in kneighbors方法计算其权重以查找邻居:
test = [[np.random.uniform(-1, 1) for _ in xrange(len(X[0]))]]
neighbors, distances = knn.kneighbors(test)
for d in distances:
weight = 1.0/d
print weight
Run Code Online (Sandbox Code Playgroud)
问题是所有特征都以相同的权重进入d的计算,因为你已经指定了欧几里德度量,即d是平方根
1*(x1_neighbor - x1_test)^ 2 + 1*(x2_neighbor - x2_test)^ 2 + ...
这是因为Minkowsky度量只是一个沿对角线的矩阵.如果您需要不同的权重,则可以指定备用度量标准.但是,如果您只想快速而肮脏地说明各种功能的重要性,那么估计功能i的重要性的一种典型方法是随机置换功能i的所有值,并查看它对回归器性能的影响程度.你可以在这里阅读更多相关信息.
| 归档时间: |
|
| 查看次数: |
2799 次 |
| 最近记录: |