Python Skikit学习多元回归模型

Python Skikit学习多元回归模型,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,是否可以针对不同的特征使用不同的模型,例如,当我想从收入中值预测房价时,我会使用线性模型,但当我想从坐标预测房价时,最好使用k近邻 import sklearn import numpy as np X_housing_income = np.array([l[0] for l in X_housing].reshape(-1,1) X_housing_latitude = np.array([l[1] for l in X_housing].reshape(-1,1) X_housing_l

是否可以针对不同的特征使用不同的模型,例如,当我想从收入中值预测房价时,我会使用线性模型,但当我想从坐标预测房价时,最好使用k近邻

import sklearn
import numpy as np

X_housing_income = np.array([l[0] for l in X_housing].reshape(-1,1)
X_housing_latitude = np.array([l[1] for l in X_housing].reshape(-1,1)
X_housing_longitude = np.array([l[2] for l in X_housing].reshape(-1,1)

lin_reg_income = sklearn.linear_model.LinearRegression()
lin_reg_income.fit(X_housing_income,y_housing)

knn_reg_latitude = sklearn.neighbors.KNeighborsRegression()
knn_reg_latitude.fit(X_housing_latitude,y_housing)

knn_reg_longitude = sklearn.neighbors.KNeighborsRegression()
knn_reg_longitude.fit(X_housing_longitude,y_housing)

prediction_income = lin_reg_income.predict(some_income)
prediction_latitude = knn_reg_latitude.predict(some_latitude)
prediction_longitude = knn_reg_longitude.predict(some_longitude)

prediction_mean = (prediction_income + prediction_latitude + prediction_longitude) / 2

有没有一种方法可以在scikit learn中结合这一点,还是由我自己来实现更好?

您必须自己来做,但请查看我在处理缺失数据时所做的这篇文章-

在接近结尾时,我创建了一个类,该类旨在使用pandas来检测给定样本中的哪些条目是NaN(每次只需将房价设置为NaN),然后选择一组合适的模型


目前,它只选择一个小的ANN作为模型(但你可以很容易地改变它),平均技术需要调整,但它应该让你走上正确的道路

我只是自己实现了它,因为在scikit learn中似乎没有这样的东西:

class MultiModelRegressor(RegressorMixin):
    def __init__(self,models):
        self.models = models
    def fit(self, X, y):
        X_ = X.copy().reshape(X.shape[1], X.shape[0])
        y_ = y.copy().reshape(-1, y.shape[0])
        for features, labels, model in [(a,b,c) for a in X_ for b in y_ for c in self.models]:
            if not model == None:
                model.fit(features.reshape(-1,1), labels.reshape(-1,1))
    def predict(self, X):
        X_ = X.copy().reshape(X.shape[1], X.shape[0])
        prediction = np.empty(X.shape[0])
        for features, model in [(a,b) for a in X_ for b in self.models]:
            if not model == None:
                prediction = (np.array([a+b for a in prediction for b in model.predict(features.reshape(-1,1))] ) / 2)
        return prediction.reshape(X.shape[0])

它并不完美,但我真的无法理解为什么这样的东西还没有出现在scikit learn中,我的意思是它非常有用,不是吗?

我建议您通过编程努力来解决问题,或者转到:不同意@ScipioneSarlo,stats.stackexchange倾向于关注“手工计算”或理论。这个问题实际上不属于任何地方。但要回答最初的问题,您必须使用所需的输入数据训练不同的模型。可以使用pandas编写代码,对这个示例执行“删除所有NaN”并选择一个模型“但是sklearn没有这个feature@MohammadAthar,因为交叉验证是“适用于统计学家、数据挖掘者以及任何从事数据分析或对其感兴趣的人。如果您对统计分析、应用或理论设计实验有疑问,请收集数据挖掘机器学习可视化数据概率理论数理统计和数据驱动计算“pgmcr似乎在寻求方法学上的支持,这可以通过结合FeatureUnion和Pipeline来实现。@Vivek Kumar,你能告诉我怎么做吗?