我对 Python 和机器学习比较陌生,但我一直在致力于构建抵押贷款价格的预测模型。我正在努力的地方是使用 K 最近邻算法来创建功能。
以下是我如何理解我想要完成的任务的机制:
- 我有两个数据文件:已售抵押贷款和已列出抵押贷款
- 在这两个数据文件中,我具有相同的特征(包括纬度/经度)。
- 我想在列出的抵押贷款中创建一个列,代表邻近地区最密切相关的房屋的中位价格。
- 我将使用 3 中列出的方法来创建 1-3 个月、4-6 个月、7-12 个月的专栏。
- 另一列是这三列的趋势。
我在 KNN 插补上找到了一些东西,但这似乎不是我要找的。p>
我该如何执行这个想法?是否有我可能错过的有帮助的资源?
任何指导将不胜感激。谢谢!
最佳答案
因此,据我了解,您希望使用已售抵押贷款数据拟合 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
现在,训练代码将如下所示:
从 sklearn.neighbors 导入 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 个元素:
将 numpy 导入为 np
Zj = np.median(np.array([Pj1, Pj2, .., Pj5]))
因此,这样就可以找到每行Listing数据的中位价格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
关于python - 使用 K 最近邻创建特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45362482/