我最近一直在努力让sklearn使用我的数据。我的每个~20k行有609列数据。数据格式如下:
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)
对于如何从这里前进,我有点不知所措;我希望能够提供所有"输入"价值并接受某种预测"输出"训练我的数据集后的值。我已经尝试在网上搜索一些关于此的文档,但无法确定如何完全执行此操作。
感谢您的帮助。
答案 0 :(得分:0)
首先,您需要将训练过的模型存储在某处。您可以通过以下方式替换代码的最后两行来完成此操作:
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
将包含您的预测。
您可以在documentation中找到更详细的信息。
一些提示:
您应该考虑使用pandas - 这样可以更轻松地处理大型数据集。
您可以通过替换
来节省一些输入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]]
后者也更容易阅读。