如何使用sklearn

时间:2017-03-06 13:46:43

标签: python machine-learning scikit-learn

我最近一直在努力让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)
对于如何从这里前进,我有点不知所措;我希望能够提供所有"输入"价值并接受某种预测"输出"训练我的数据集后的值。我已经尝试在网上搜索一些关于此的文档,但无法确定如何完全执行此操作。

感谢您的帮助。

1 个答案:

答案 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]]
    

    后者也更容易阅读。