Как запустить регрессию на несколько факторов с множеством факторов обучения, используя склеарн

Недавно я работал над попыткой заставить sklearn работать с моими данными. У меня есть 609 столбцов данных для каждой из моих ~20 тыс. Строк. Данные отформатированы следующим образом:

  • Строки 0-7 представляют собой разные "выходные данные" (каждая из 1–8 независимо зависит от "входов")

  • Строки 8-608 являются "входными значениями", то есть значениями, которые производят выходные данные первых семи столбцов.

Все эти значения находятся в файле с именем unlabelled.csvили действительно CSV с любым именем, которое вы выбрали для назначения.

Итак, я пытался запустить регрессию SGD следующим образом:

import sklearn
from sklearn import linear_model as linmod
import numpy as np
rawdata=open('unlabelled.csv','r')
dataset=np.loadtxt(rawdata,delimiter=",") # this is where there's a hang
factzero=dataset[:,0]
factone=dataset[:,1]
facttwo=dataset[:,2]
factthree=dataset[:,3]
factfour=dataset[:,4]
factfive=dataset[:,5]
factsix=dataset[:,6]
factseven=dataset[:,7]
base=dataset[:,8:608]
facts=[factzero,factone,facttwo,factthree,factfour,factfive,factsix,factseven]
clf=linmod.SGDRegressor()
for fact in facts:
    clf.fit(base,fact)

Теперь это возвращает (в любом случае в командной строке Python):

SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)

Я немного растерялся относительно того, как идти вперед отсюда; Я хочу иметь возможность задавать все "входные" значения и получать своего рода прогноз "выходных" значений после обучения на моем наборе данных. Я пытался найти в Интернете некоторую документацию по этому вопросу, но не могу понять, как именно это сделать.

Спасибо за помощь.

1 ответ

Решение

Во-первых, вам нужно где-то хранить обученные модели. Вы можете сделать это, заменив две последние строки вашего кода следующим образом:

models = [clf.fit(base, fact) for fact in facts]

После обучения ваших моделей вам потребуются некоторые исходные данные, на основе которых вы сделаете свой прогноз. Скажем, у вас есть какой-то невидимый набор данных, который называется unseen_data.csv, Предполагая, что у вас есть это, и вы загрузили его в какую-то переменную unseen_datasetВы можете использовать это, чтобы сделать свои прогнозы следующим образом:

predicted_facts = [model.predict(unseen_dataset) for model in models]

Сейчас predicted_facts будет содержать ваши прогнозы.

Вы можете найти гораздо более подробную информацию в документации.


Пара советов:

  • Вы должны рассмотреть возможность использования панд - это облегчает работу с большими наборами данных.

  • Вы можете сэкономить немного печати, заменив

    factzero=dataset[:,0]
    factone=dataset[:,1]
    facttwo=dataset[:,2]
    factthree=dataset[:,3]
    factfour=dataset[:,4]
    factfive=dataset[:,5]
    factsix=dataset[:,6]
    factseven=dataset[:,7]
    facts=[factzero,factone,facttwo,factthree,factfour,factfive,factsix,factseven]
    

    с

    facts = [fact for fact in dataset[:, :8]]
    

    Последнее также легче читать.

Другие вопросы по тегам