使用 K 最近邻创建特征
Create Feature Using K-Nearest Neighbors
我对 Python 和机器学习还比较陌生,但我一直致力于构建抵押贷款价格的预测模型。我挣扎的地方是使用 K-最近邻算法来创建特征。
以下是我对我想要完成的工作的理解方式:
- 我有两个数据文件:Mortgages Sold 和 Mortgages Listed
- 在两个数据文件中我有相同的特征(包括Lat/Long)。
- 我想在 Mortgages Listed 中创建一个列,代表附近地区最密切相关的房屋的中位数价格。
- 我将使用 3 中列出的方法创建 1-3 个月、4-6 个月、7-12 个月的列。
- 另一列是这三列的趋势。
我在 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
我对 Python 和机器学习还比较陌生,但我一直致力于构建抵押贷款价格的预测模型。我挣扎的地方是使用 K-最近邻算法来创建特征。
以下是我对我想要完成的工作的理解方式:
- 我有两个数据文件:Mortgages Sold 和 Mortgages Listed
- 在两个数据文件中我有相同的特征(包括Lat/Long)。
- 我想在 Mortgages Listed 中创建一个列,代表附近地区最密切相关的房屋的中位数价格。
- 我将使用 3 中列出的方法创建 1-3 个月、4-6 个月、7-12 个月的列。
- 另一列是这三列的趋势。
我在 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