Skip to content

Instantly share code, notes, and snippets.

@Verdant31
Created April 1, 2024 23:32
Show Gist options
  • Save Verdant31/7a61a270fd7ce30813d0823f06c4270a to your computer and use it in GitHub Desktop.
Save Verdant31/7a61a270fd7ce30813d0823f06c4270a to your computer and use it in GitHub Desktop.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from sklearn.preprocessing import StandardScaler
import pandas as pd
from numpy import linalg as LA
df = pd.read_csv("forestfires.csv")
df.drop(columns=["area"], inplace=True)
scaler = StandardScaler()
scaled_features = scaler.fit_transform(df)
df = pd.DataFrame(scaled_features, index=df.index, columns=df.columns)
df.head()
columns = df.columns
newDf = pd.DataFrame(columns=columns, index=columns)
for i in columns:
for j in columns:
if(i == j):
expected_value_i = (df[i]).sum() / len(df)
expected_value_i_square = (df[i]*df[j]).sum()/ len(df)
square_expected_value_i = expected_value_i * expected_value_i
newDf[i][j] = expected_value_i_square - square_expected_value_i
else:
expected_value_ij = (df[i] * df[j]).sum() / len(df)
expected_value_i = (df[i]).sum() / len(df)
expected_value_j = (df[j]).sum() / len(df)
newDf[i][j] = expected_value_ij - expected_value_i * expected_value_j
display(newDf)
# Finding eigenvalues for covariance matrix with numpy
float_df = newDf.to_numpy(dtype="float")
eigenvalues, eigenvectors = LA.eig(float_df)
idx = eigenvalues.argsort()[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:,idx]
print(eigenvalues)
print(eigenvectors)
transformed_data = np.matmul(np.array(df),eigenvectors[:,:4])
transformed_data
display(pd.DataFrame(transformed_data, columns=["pc1", "pc2", "pc3", "pc4"]))
from sklearn.decomposition import PCA
pca = PCA(n_components=4)
principalComponents = pca.fit_transform(df)
principalDf = pd.DataFrame(data = principalComponents, columns = ['pc'+ str(i+1) for i in range(4)])
display(principalDf)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment