Kaggle(link)のクレジットカード詐欺データセットを処理しようとしているうちに、私はより良いモデルを得ることができました。トレーニングのためのデータセット。説明するだけで、データセットは31個の機能の284807個のレコードで構成されています。このデータセットにはわずか492件の詐欺があります(わずか0.17%)。より良いPCA分解を行うためにデータセットを減らすことはよい習慣です
私は、3つの最も重要なディメンションだけを表示できるように、完全なデータセットでPCAを実行しようとしました。それはどちらか、それは詐欺だかいないかを決定するためのパターンを見つけることは不可能だが、この一
:結果は以下のものです。
私は非詐欺のデータセットを減らす場合のみ比(詐欺/ non_fraud)を高めるために、これは私が同じプロット
を持っているものですここで、より良い分解を行うために、削減されたデータセットにPCAを適合させることが理にかなっているかどうかはわかりません。たとえば、100000ポイントのPCAを使用すると、PCA1> 5のすべてのエントリが不正であると言えるでしょう。
あなたはそれを試してみたい場合、これはコードです:あなたの助けのための
dataset = pd.read_csv("creditcard.csv")
sample_size = 284807-492 # between 1 and 284807-492
a = dataset[dataset["Class"] == 1] # always keep all frauds
b = dataset[dataset["Class"] == 0].sample(sample_size) # reduce non fraud qty
dataset = pd.concat([a, b]).sample(frac=1) # concat with a shuffle
# Scaling of features for the PCA
y = dataset["Class"]
X = dataset.drop("Class", axis=1)
X_scale = StandardScaler().fit_transform(X)
# Doing PCA on the dataset
pca = PCA(n_components=3)
X_pca = pca.fit_transform(X_scale)
pca1, pca2, pca3, c = X_pca[:, 0], X_pca[:, 1], X_pca[:, 2], y
plt.scatter(pca1, pca2, s=pca3, c=y)
plt.xlabel("PCA1")
plt.ylabel("PCA2")
plt.title("{}-points".format(sample_size))
# plt.savefig("{}-points".format(sample_size), dpi=600)
おかげで、
この回答に感謝します。学ぶべきことがたくさんあり、これは間違いなく良いことです –