Kaggle (link)의 신용 카드 사기 데이터 세트 작업을 시도하면서 나는 더 나은 모델을 가질 수 있다는 것을 알았습니다. 훈련을위한 데이터 세트. 단지 데이터 세트를 설명하기 위해 31 개 기능의 284807 레코드로 구성됩니다. 이 데이터 세트에는 단지 492 건의 사기 (단지 0.17 %)가 있습니다.데이터 세트를 줄여서 PCA 분해율을 높이는 것이 좋습니다.
필자는 전체 데이터 세트에서 PCA를 수행하여 가장 중요한 세 가지 차원 만 표시하려고 시도했습니다. 그 중 하나는 사기의 여부를 결정하는 패턴을 발견하는 것은 불가능이 하나에서
: 결과는 다음 중 하나입니다. 내가 비 사기에만 비율 (사기/non_fraud)를 증가의 데이터 집합을 줄이면
이 내가 같은 플롯
과 함께하는 것입니다더 나은 분해를 위해 감소 된 데이터 세트에 PCA를 맞추는 것이 이치에 맞는지 모르겠습니다. 예를 들어 100,000 포인트의 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)
감사합니다,
이 답변에 많은 감사드립니다! 배울 것이 너무 많습니다. 그리고 이것은 확실히 좋은 것입니다. –