Скикит Узнайте несколько моделей регрессии - PullRequest
0 голосов
/ 07 мая 2018

Можно ли использовать разные модели для разных функций, например, когда я хочу предсказать цены на жилье по среднему доходу, я бы использовал линейную модель, но когда я хочу предсказать их по координатам, было бы лучше использовать 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 или лучше реализовать это самостоятельно?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Я только что реализовал это самостоятельно, потому что кажется, что в 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, я имею в виду, что это довольно полезно, не так ли?

0 голосов
/ 07 мая 2018

Вам придется сделать это самостоятельно, но посмотрите эту запись, которую я сделал для работы с отсутствующими данными- https://colab.research.google.com/drive/1ZyyppDx72d6bRZc2q4ksqrmHsXHvkGI6

В этом, ближе к концу, я создаю класс, предназначенный для использования панд, чтобы определить, какие записи в данном образце являются NaN (просто каждый раз устанавливайте цену дома на NaN), а затем выбираю соответствующий набор моделей.

В настоящее время в качестве модели выбирается только небольшая ИНС (но вы можете изменить это довольно легко), а технику усреднения необходимо настроить, но вы должны начать на правильном пути

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...