新年まで14日あり、KPIを達成する時が来ました(ง•_•)ง
そうです、これは別のエラー訂正の投稿です。私はまだ最終的な宿題を書いていませんが、エラー訂正の経験を記録するのに退屈していますU•e•* U
1.問題の説明
線形判別分析を適用して、古典的な手書き数字のデータセットを分類する
最初に使用するパッケージとデータセットをインポートし、次にLinearDiscriminantAnalysis()を使用してデータセットをトレーニングし、エラーを報告します。ValueError:dim3の配列が見つかりました。LinearDiscriminantAnalysisは<=2であると予想されます。
import numpy as np
# 数字图像
x_train = np.load('mnist_x_train.npy') # 训练集数据
x_test = np.load('mnist_x_test.npy') # 测试集数据
# 对应的标签,即 0, 1, 2, ..., 9
y_train = np.load('mnist_y_train.npy')
y_test = np.load('mnist_y_test.npy')
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# 应用Linear Discriminant Analysis来分类
LDA = LinearDiscriminantAnalysis()
LDA.fit(x_train, y_train)
2.理由分析
このレポートの翻訳では、入力配列が3次元であることがわかり、関数LinearDiscriminantAnalysis()では、入力関数の次元が2以下である必要があります。
変数を見てみると、システムは本当に私を間違っていませんでした( ̄(Worker) ̄)
3.問題を解決します
理由がわかったので、問題は簡単に解決できます。形状変更機能を使用するだけです。
トレーニングの前にコードを入力すると、問題は解決します〜( ̄▽ ̄)〜*
x_train_2D = (x_train.reshape(x_train.shape[0], x_train.shape[1] * x_train.shape[2]))
x_test_2D = (x_test.reshape(x_test.shape[0], x_test.shape[1] * x_test.shape[2]))
補足知識
1. reshape関数の公式ドキュメントは次のとおりです。numpy.reshape—NumPyv1.21マニュアル
reshape関数:データを変更せずに配列の次元を変更します
パラメータ:
- shape:intまたはtupleの整数。新しい形状は、元の形状と互換性がある必要があります。整数の場合、結果はその長さの1次元配列になります。形状の寸法は-1にすることができます。この場合、値は配列の長さと残りの次元から推測されます。
- 順序:{'C'、'F'、'A'}オプション、このインデックス順序を使用してaの要素を読み取り、このインデックス順序を使用して要素を再形成された配列に配置します。「C」は、要素がCのようなインデックス順序を使用して読み取り/書き込みされ、最後の軸のインデックスが最も速く変化し、最初の軸のインデックスに戻って最も遅く変化することを意味します。「F」は、Fortranのようなインデックスの順序を使用して要素を読み取り/書き込みすることを意味し、最初のインデックスが最も速く変更され、最後のインデックスが最も遅く変更されます。'C'および'F'オプションは、基になる配列のメモリレイアウトを考慮せず、インデックスの順序のみを参照することに注意してください。「A」は、aがメモリ内で連続しているFortranの場合は、Fortranのようなインデックス順で、それ以外の場合はCのような順序で要素を読み取り/書き込みすることを意味します。
2. reshape()関数は配列配列で動作し、リスト結果に対してエラーが報告されるため、この関数を使用する前に、変数の型が配列であることを確認してください
3. reshape()関数で-1が使用されている場合、Numpyは残りの次元に従って配列の別の属性値を計算します
簡単に言えば、列数が2で行数が不明な場合は、reshape(-1、2)と書くことができます。行数が2で、列数が不明、reshape(2、-1)と書くことができます
4. a.shape()#报错:AttributeError:'list'オブジェクトに属性'shape'がありません