

現在、Python機械学習プログラミング 達人データサイエンティストによる理論と実装の本で勉強してまして、  
コードを実装すると、下記のエラーが発生してしまいます。ネットで調べたところ、numpyでarrayを追加することで解決とのことですが、どのようなコードを追加すればよいのか分かりません。  
コードの追加及び他の方法で解決することについて、ご教示よろしくお願いいたします。

[code]

    weights, params = [], []
    for c in np.arange(-5, 5):
        lr = LogisticRegression(C=10.**c, random_state=0) 
        lr.fit(X_train_std, y_train)
        
        weights.append(lr.coef_[1])
        
        params.append(10.**c)
        
        weights = np.array(weights)
        
        plt.plot(params, weights[:, 0], label='petal lenght')
        plt.plot(params, weights[:, 1], linestyle='--', label='petal width')
        plt.ylabel('weight coefficient')
        plt.xlabel('C')
        plt.legend(loc='upper left')
        
        plt.xscale('log')
        plt.show()
    
[/code]

[code]

    AttributeError                            Traceback (most recent call last)
    <ipython-input-17-037561b182ec> in <module>
          4     lr.fit(X_train_std, y_train)
          5 
    ----> 6     weights.append(lr.coef_[1])
          7 
          8     params.append(10.0**c)
    
    AttributeError: 'numpy.ndarray' object has no attribute 'append'
    ​
    
[/code]


CC BY-SA 4.0
2020-08-30T02:23:13.817
69976
2022-11-19T07:06:35.770
2020-08-30T04:56:06.040
26370
40847
question
python 機械学習
'numpy.ndarray' object has no attribute 'append'のエラーについて


forループの中で、変数weightsがlistからndarrayに変換されているため、2回めのループ以降に上記のエラーが出ているものと思われます。したがって、下記のようにfor文が終了したところでlistのweightsをndarrayに変換して実行してみたらどうでしょうか。手元で試していないので参考に留めてください。

[code]

    weights, params = [], []
    for c in np.arange(-5, 5):
        lr = LogisticRegression(C=10.**c, random_state=0) 
        lr.fit(X_train_std, y_train)
        
        weights.append(lr.coef_[1])
        
        params.append(10.**c)
        
    weights = np.array(weights)
        
    plt.plot(params, weights[:, 0], label='petal lenght')
    plt.plot(params, weights[:, 1], linestyle='--', label='petal width')
    plt.ylabel('weight coefficient')
    plt.xlabel('C')
    plt.legend(loc='upper left')
        
    plt.xscale('log')
    plt.show()
    
[/code]


CC BY-SA 4.0
2020-08-30T05:13:12.347
69981
2020-08-30T05:13:12.347
35328
69976
answer