Pandas scatter matrix memiliki kekurangan dalam desainnya. Yaitu, plot KDE atau histogram pada diagonal untuk sisi yang menampilkan tick dan label lainnya. Hal ini mengharuskan kita untuk melakukan normalisasi sebelum membuat scatter matrix.
Contoh kode berikut menunjukkan cara membuat scatter matrix setelah normalisasi:
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
# Membuat dataset yang akan digunakan
data = {'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# Normalisasi data menggunakan MinMaxScaler
scaler = MinMaxScaler()
scaled_df = scaler.fit_transform(df)
# Membuat scatter matrix setelah normalisasi
import matplotlib.pyplot as plt
plt.scatter(scaled_df[:, 0], scaled_df[:, 1])
plt.xlabel('A')
plt.ylabel('B')
plt.show()
Masalah dengan LDA
LDA (Linear Discriminant Analysis) adalah algoritma untuk mengklasifikasikan data berdimensi tinggi menjadi dua kelas. Namun, dalam beberapa kasus, LDA dapat mengalami error ketika mencoba menghitung eigenvector.
Contoh kode berikut menunjukkan cara melakukan LDA manual:
import numpy as np
def LDAnalysis_manual(X, y):
n_features = X.shape[1]
n_classes = len(np.unique(y))
# Hitung mean vectors
mean_vectors = []
for cl in range(n_classes):
mean_vectors.append(np.mean(X[y == cl], axis=0))
# Hitung in-class scatter matrix
S_W = np.zeros((n_features, n_features))
for cl, mv in zip(range(1, n_classes), mean_vectors):
class_sc_mat = np.zeros((n_features, n_features)) # each class' scatter matrix
for row in X[y == cl]:
row, mv = row.reshape(n_features, 1), mv.reshape(n_features, 1) # column vectors
class_sc_mat += (row - mv).dot((row - mv).T)
S_W += class_sc_mat # sum class scatter matrices
# Hitung between-class scatter matrix
S_B = np.zeros((n_features, n_features))
for i, mean_vec in enumerate(mean_vectors):
n = X[y == i + 1].shape[0]
mean_vec = mean_vec.reshape(n_features, 1) # make column vector
overall_mean = overall_mean.reshape(n_features, 1)
S_B += n * (mean_vec - overall_mean).dot((mean_vec - overall_mean).T)
# Hitung eigenvectors dan eigenvalues
eig_vals, eig_vecs = np.linalg.eig(np.linalg.inv(S_W).dot(S_B))
return eig_vals, eig_vecs
X = ... # isi dengan dataset Anda
y = ... # isi dengan label dataset Anda
eig_vals, eig_vecs = LDAnalysis_manual(X, y)
Namun, dalam beberapa kasus, LDA dapat mengalami error ketika mencoba menghitung eigenvector. Kita perlu memeriksa ulang kode LDA manual dan memastikan bahwa tidak ada kompleksitas yang berlebihan.