使用K-Nearest Neighbors创建特征

时间:2017-07-27 23:16:49

标签: python machine-learning data-science knn nearest-neighbor

我对Python和机器学习比较陌生,但我一直在努力构建抵押价格的预测模型。我正在努力的地方是使用K-Nearest Neighbor算法来创建一个特征。

以下是我理解我想要完成的内容的机制:

  1. 我有两个数据文件:已售出抵押贷款和抵押贷款
  2. 在两个数据文件中,我都有相同的功能(包括Lat / Long)。
  3. 我想在抵押贷款列表中创建一个列,表示邻近地区最密切相关的房屋的中位数价格。
  4. 我将使用3中列出的方法创建1-3个月,4-6个月,7-12个月的列。
  5. 另一栏将是这三列的趋势。
  6. 我已经找到了关于KNN估算的内容,但这似乎并不是我想要的。

    我如何执行这个想法?是否有我可能错过的资源会有所帮助?

    任何指导都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

因此,根据我的理解,您希望使用Mortgages Sold数据来拟合KNN模型,以预测抵押贷款列出数据的价格。 这是一个经典的KNN问题,您需要在列出数据中的每个特征向量的待售数据中找到最近的特征向量,然后取这些特征向量的中值。

  • 考虑Sold数据中有n行,每行的特征向量为X1,X2,...,Xn,相应的价格为P1,P2,...,Pn

    X_train = [X1, X2, ..., Xn]

    y_train = [P1, P2, ..., Pn]

  • 请注意,每个Xi本身都是一个特征向量,代表第i行

  • 现在,请考虑列出数据中每行的已售数据中最近的5行。因此,此处可能需要优化的KNN模型参数是:

    NUMBER_OF_NEIGHBOURS = 5

  • 现在,培训代码将如下所示:

    from sklearn.neighbors import KNeighborsClassifier

    knn_model = KNeighborsClassifier(n_neighbors=NUMBER_OF_NEIGHBOURS)

    knn_model.fit(X_train, y_train)

  • 对于预测,考虑列出数据中有m行,每行的特征向量为F1,F2,...,Fm。需要确定相应的中位数价格Z1,Z2,...,Zm。

    X_test = [F1, F2, ..., Fm]

  • 请注意,X_train和X_test中的特征向量应使用相同的Vectorizer / Transformer进行矢量化。了解有关矢量化器here的更多信息。

  • 预测代码如下所示:

    y_predicted = knn_model.predict(X_test)

  • 此y_predicted列表的每个元素将包含(在这种情况下)距离y_train最近的5个价格。那就是:

    y_predicted = [(P11, P12, .., P15), (P21, P22, .., P25), .., (Pm1, Pm2, .., Pm5)]

  • 对于y_predicted的每个第j个元素:

    import numpy as np

    Zj = np.median(np.array([Pj1, Pj2, .., Pj5]))

  • 因此,通过这种方式,您可以找到列出数据的每一行的中位数价格Zj

  • 现在,来参数优化部分。 KNN模型中唯一的超参数是NUMBER_OF_NEIGHBOURS。您可以通过将X_train本身划分为80:20比率来找到此参数的最佳值。培养80%的部分,并对剩余的20%部分进行交叉验证。一旦你确定准确度数字足够好,你可以使用超参数NUMBER_OF_NEIGHBOURS的这个值来预测y_test。

  • 最后,对于按月分析,您需要创建按月计算的模型。例如,M1 = 1-3个月的已售数据,M2 = 4-6个月的已售数据,M3 = 7-12个月的已售数据等等。

参考:http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html