【问题标题】:scikit-learn SGDClassifier object of type 'NoneType' has no len()'NoneType' 类型的 scikit-learn SGDClassifier 对象没有 len()
【发布时间】:2017-03-13 05:48:53
【问题描述】:

我只是尝试在 Azure ML 中使用 Python 中的 SGD 训练一个简单的逻辑回归模型,但是当我运行代码时,它不断出现错误。更令人困惑的是,该错误仅出现在 Epoch 8 中,而不出现在任何 epoch 中。如果有人可以让我知道为什么会出现这样的错误以及如何避免它,我将不胜感激。我在下面包含了代码和错误。

from sklearn.linear_model import SGDClassifier
    #Import data
    cadd_dir = '.\\Script Bundle\\theano\\data\\'
    ClinVar_ESP_dir = '.\\Script Bundle\\theano\\data\\'
    #load data    
    X_tr = numpy.load(os.path.join(cadd_dir, 'training.X.npz'))
    X_tr = scipy.sparse.csr_matrix((X_tr['data'], X_tr['indices'], X_tr['indptr']), shape=X_tr['shape'])
    y_tr = numpy.load(os.path.join(cadd_dir, 'training.y.npy'))
    #Train model
    print('Train SGD Logistic Regression')
    alpha = 1e-2
    clf = SGDClassifier(loss="log", penalty='l2', alpha=alpha, random_state=None, shuffle=False, n_iter=10, verbose=1, n_jobs=1)
    clf.fit(X_tr, y_tr)




#Error
"[Information]         -- Epoch 7
[Information]         Norm: 0.40, NNZs: 641, Bias: 0.000623, T: 186214000, Avg. loss: 0.670200
[Information]         Total training time: 43.97 seconds.

[Information]         -- Epoch 8
[Error]         Caught exception while executing function: Traceback (most recent call last):
[Error]           File "C:\server\invokepy.py", line 211, in batch
[Error]             xdrutils.XDRUtils.DataFrameToRFile(outlist[i], outfiles[i], True)
[Error]           File "C:\server\XDRReader\xdrutils.py", line 51, in DataFrameToRFile
[Error]             attributes = XDRBridge.DataFrameToRObject(dataframe)
[Error]           File "C:\server\XDRReader\xdrbridge.py", line 40, in DataFrameToRObject
[Error]             if (len(dataframe) == 1 and type(dataframe[0]) is pd.DataFrame):
[Error]         TypeError: object of type 'NoneType' has no len()
[Information]         Norm: 0.40, NNZs: 641, Bias: 0.000623, T: 212816000, Avg. loss: 0.669797
[Information]         Total training time: 50.21 seconds.

[Information]         -- Epoch 9
[Information]         Norm: 0.40, NNZs: 641, Bias: 0.000622, T: 239418000, Avg. loss: 0.669482
[Information]         Total training time: 56.46 seconds."

【问题讨论】:

    标签: python-2.7 scikit-learn azure-machine-learning-studio


    【解决方案1】:

    您的程序正在创建常规输出(“[Information]”)和错误消息(“[Error]”),但 Azure ML Studio 仅用于显示一个输出日志,因此两种类型的消息都已写入同一个文件。更令人困惑的是,每种类型的消息在写入日志时都会经历不同的延迟。这就解释了为什么您的错误消息会被包含在训练阶段 8 的信息消息中,即使两者无关。

    错误是由应该在模块完成运行时导出 Python 脚本结果的函数引发的。若要在 Azure ML 中正常运行,您的代码需要包装在名为 azureml_main() 的函数中(该函数作为模板包含在新的执行 Python 脚本模块中)。 azureml_main() 需要返回一个 pandas DataFrame。我不确定您要返回什么,因为您的代码只是适合模型,但以下内容可能会有所帮助:

    from sklearn.linear_model import SGDClassifier
    import numpy
    import scipy
    import pandas as pd
    
    cadd_dir = '.\\Script Bundle\\theano\\data\\'
    ClinVar_ESP_dir = '.\\Script Bundle\\theano\\data\\'
    
    def azureml_main(input_df1 = None, input_df2 = None):
        #load data    
        X_tr = numpy.load(os.path.join(cadd_dir, 'training.X.npz'))
        X_tr = scipy.sparse.csr_matrix((X_tr['data'], X_tr['indices'], X_tr['indptr']), shape=X_tr['shape'])
        y_tr = numpy.load(os.path.join(cadd_dir, 'training.y.npy'))
        #Train model
        print('Train SGD Logistic Regression')
        alpha = 1e-2
        clf = SGDClassifier(loss="log", penalty='l2', alpha=alpha, random_state=None, shuffle=False, n_iter=10, verbose=1, n_jobs=1)
        clf.fit(X_tr, y_tr)
        return(pd.DataFrame([]))
    

    附:您是否与 MSR 的 Jenn/Nicolo 合作进行变异效应预测?如果没有,你应该 ping 他们

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2021-03-03
      • 2012-08-02
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多