使用 K 最近邻创建特征

Create Feature Using K-Nearest Neighbors

我对 Python 和机器学习还比较陌生,但我一直致力于构建抵押贷款价格的预测模型。我挣扎的地方是使用 K-最近邻算法来创建特征。

以下是我对我想要完成的工作的理解方式:

  1. 我有两个数据文件:Mortgages Sold 和 Mortgages Listed
  2. 在两个数据文件中我有相同的特征(包括Lat/Long)。
  3. 我想在 Mortgages Listed 中创建一个列,代表附近地区最密切相关的房屋的中位数价格。
  4. 我将使用 3 中列出的方法创建 1-3 个月、4-6 个月、7-12 个月的列。
  5. 另一列是这三列的趋势。

我在 KNN 插补上找到了一些东西,但这似乎不是我要找的东西。

我该如何着手执行这个想法?是否有我可能错过的有用资源?

如有任何指导,我们将不胜感激。谢谢!

因此,据我了解,您想使用 Mortgages Sold 数据拟合 KNN 模型以预测 Mortgages Listed 数据的价格。 这是一个经典的 KNN 问题,您需要为 Listed 数据中的每个特征向量在 Sold 数据中找到最近的特征向量,然后取这些特征向量的中值。

  • 假设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)

  • 为了预测,假设Listed数据中有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]))

  • 这样一来,就可以求出每行Listed数据的中间价格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