我最近一直在尝试使用sklearn处理我的数据。我有大约2万行的数据,每行有609列。数据格式如下:
-
第0到7行分别是不同类型的“输出”(每行1到8的输出都独立基于“输入”)
-
第8到608行是“输入值”,即产生前七列输出的值。
所有这些值都可以在名为unlabelled.csv
的文件中找到,或者您可以选择任何您指定的CSV文件名。
所以我一直在尝试对其进行SGD回归,方法如下:
import sklearnfrom sklearn import linear_model as linmodimport numpy as nprawdata=open('unlabelled.csv','r')dataset=np.loadtxt(rawdata,delimiter=",") # 这里会出现挂起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)
我对如何继续感到有些困惑;我想能够提供所有“输入”值,并在训练我的数据集后获得某种“输出”值的预测。我试图在网上寻找一些相关文档,但无法确定具体如何操作。
谢谢您的帮助。
回答:
首先,您需要将训练好的模型存储在某个地方。您可以通过将代码的最后两行替换为以下内容来实现这一点:
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
将包含您的预测结果。
您可以在文档中找到更多详细信息。
一些提示:
-
您应该考虑使用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]]
后者也更易于阅读。