1. ホーム
  2. ディープラーニング

MaxentClassifier.train() でエラー発生 AttributeError: 'list' オブジェクトに 'items' 属性がない

2022-02-21 12:32:38

最大エントロピーモデルの学習でエラーが発生しました。

x["index"] = range(len(x))
xdic = x.set_index("インデックス").T.to_dict("リスト")です。
トレイン = [ ]である。
for i in range(len(xdic)):
    train.append((xdic[i],y[i]))を実行する。
classifier = MaxentClassifier.train(train, 'IIS', trace=0, max_iter=1000)

トレースバック (最新の呼び出し)。

  ファイル "<ipython-input-84-c89bba70a6d9>", 行 6, in <module>
    classifier = MaxentClassifier.train(train, 'IIS', trace=0, max_iter=1000)

  ファイル "C:³ Files³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools
    train_toks, trace, エンコーディング, ラベル, **カットオフ)

  ファイル "C:³ Files³ Electronics Tools³ Electronics Tools³.py", 行 1119, in train_maxent_classifier_with_iis
    encoding = BinaryMaxentFeatureEncoding.train(train_toks, labels=labels)

  ファイル "C:Document:Anaconda3.0.0, line 622, in train
    for (fname, fval) in tok.items():

AttributeError: 'list' オブジェクトには 'items' という属性がありません。

ネットで検索しても、どこが間違っているのかわかりませんでした。どうやらこの間違いをしたのは私だけのようなので、MaxentClassifier.train()関数の各パラメータの形式を調べてみると、trainの形式は必ず( リスト ( タプル ( ディクショナリー スト ) ) ). 読み間違えかと思った、なんでこんな複雑な入力形式があるんだ?と思いましたが、試してみることにします。

train=[]
for i in range(len(x)):
    sss={}
    sss[x.iloc[1,400]]=tuple(x.iloc[1,:400].tolist())
    # must be a number, not a list
    train.append((ss,y[i]))


今回変更され、今度はエラーを報告する。

classifier = MaxentClassifier.train(train, 'IIS', trace=0, max_iter=1000)
トレースバック (最も最近の呼び出し):

  ファイル "<ipython-input-92-ae872c053900>", 行 1, in <module>
    classifier = MaxentClassifier.train(train, 'IIS', trace=0, max_iter=1000)

  ファイル "C:³ Files³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools³ Electronics Tools
    train_toks, trace, エンコーディング, ラベル, **カットオフ)

  ファイル "C:³ Files³ Electronics Tools³ Electronics Tools³.py", line 1119, in train_maxent_classifier_with_iis
    encoding = BinaryMaxentFeatureEncoding.train(train_toks, labels=labels)

  ファイル "C:Document:Anaconda3,Document:Packages,Document:NltkClassify.py"、ライン 627, in train
    count[fname, fval] += 1

TypeError: ハッシュ化できないタイプ: 'list'

Python の組み込みの不変オブジェクトはすべてハッシュ化可能で、可変コンテナ (たとえばリスト (list) や辞書 (dict)) はハッシュ化できないことがわかっただけです。だから私はリストをタプル型に変更しました、はい。

train=[]
for i in range(len(x)):
    sss={}
    sss[x.iloc[1,400]]=tuple(x.iloc[1,:400].tolist())
    # リストではなく、数字でなければならない
    train.append((ss,y[i]))を実行します。

よし、もうエラーは出ない。

それでもエラーが発生する場合は、"IIS" を "GIS" に変更してみてください。