Как запустить регрессию на несколько факторов с множеством факторов обучения, используя склеарн
Недавно я работал над попыткой заставить 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]]
Последнее также легче читать.