day 21
常見的降維算法
# 先運行之前預處理好的代碼
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')# 設置中文字體
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data=pd.read_csv('/Users/gj/東財-學習/python相關資料學習/Python60DaysChallenge-main/data.csv')
# 先篩選字符串變量
discrete_features=data.select_dtypes(include=['object']).columns.to_list()
# Home Ownership 變量
home_ownership_mapping={'Own Home':1,'Rent':2,'Have Mortgage':3,'Home Mortgage':4
}
data['Home Ownership']=data['Home Ownership'].map(home_ownership_mapping)
# Years in current job 變量
years_in_job_mapping={'<1 year':1,'1 year':2,'2 years':3,'3 years':4,'4 years':5,'5 years':6,'6 years':7,'7 years':8,'8 years':9,'9 years':10,'10+ years':11
}
data=pd.get_dummies(data,columns=['Purpose'])
data2=pd.read_csv('/Users/gj/東財-學習/python相關資料學習/Python60DaysChallenge-main/data.csv')
list_final=[]
for i in data.columns:if i not in data2.columns:list_final.append(i)
for i in list_final:data[i]=data[i].astype(int)# term 0-1 映射
term_mapping={'Short Term':0,'Long Term':1
}
data['Term']=data['Term'].map(term_mapping)
data.rename(columns={'Term':'Long Term'},inplace=True)
continuous_features=data.select_dtypes(include=['int64','float64']).columns.to_list()
# 連續特征用中位數
for feat in continuous_features:mode_value=data[feat].mode()[0]data[feat].fillna(mode_value,inplace=True)# 最開始也說了,很多調參數自帶交叉驗證,甚至是必選的參數,你如果想要不交叉更麻煩
data.drop(columns=['Id'],inplace=True)
data.info()
特征降維
通常情況下,提到降維,很多時候默認指的是無監督降維,這種方法只需要特征數據本身。但是實際上還包含一種有監督的方法。
1、無監督降維:
定義:這類算法在降維過程中不使用任何關于數據樣本的標簽信息(比如類別標簽、目標值等)。他們僅僅根據數據點本身的分布,方差、相關性、局部結構等特性來尋找低維表示。
輸入:只有特征矩陣X
目標:
保留數據中盡可能多的方差(如PCA)
保留數據的局部或全局流型結構(如LLE,LSOMAP,t-SNE,UMAP)
找到能夠有效重構原始數據的緊湊表示()
2、有監督降維:
定義:這類算法在降維過程中利用標簽信息來指導降維過程。例如,在分類問題中,我們可能希望將不同類別的樣本映射到低維空間,同時保持類別之間的區分度。
輸入:特征矩陣X和對應的標簽y
目標:
在低維空間中保留類別之間的區分度(如LDA)
最近工作上有點忙,可能每天學習的東西有限了,后面補上
@浙大疏錦行