- 連續屬性離散化的目的是為了簡化數據結構,數據離散化技術可以用來減少給定連續屬性值的個數。離散化方法經常作為數據挖掘的工具。
- 連續屬性的離散化就是將連續屬性的值域上,將值域划分為若干個離散的區間,最后用不同的符號或整數 值代表落在每個子區間中的屬性值。
離散化有很多種方法,這使用一種最簡單的方式去操作,例如:
- 原始人的身高數據:165,174,160,180,159,163,192,184
- 假設按照身高分幾個區間段:150~165, 165~180,180~195
1、使用pd.qcut:對數據進行分組
data = pd.Series([0,8,1,5,3,7,2,6,10,4,9]) # qcut()方法第一個參數是數據, 第二個參數定義區間的分割方法, 比如這里把數字分成兩半, 那就是[0, 0.5, 1] # 如果要分成4份, 就是[0, 0.25, 0.5, 0.75, 1], 也可以不是均分, 比如[0, 0.1, 0.2, 0.3, 1], 這就就會按照1:1:1: 7 # 如果是小的數,值就變成'small number',大的數,值就變成'large number': qcut = pd.qcut(data,[0,0.5,1],labels=['small number','large number']) # 自行分組,分成10組 qcut = pd.qcut(data,10) print(qcut) # 統計分組次數 print(qcut.value_counts())
2、使用pd.cut(data, bins)自定義區間分組:
- pd.cut(data, bins)
data = pd.Series([0,8,1,5,3,7,2,6,10,4,9]) # 自己指定分組區間 bins = [1, 2, 4,7,10] counts = pd.cut(data, bins) print(counts) c = counts.value_counts() print(c)
3、get_dummies實現啞變量矩陣
啞變量:也叫虛擬變量,引入啞變量的目的是,將不能狗定量處理的變量量化,如職業、性別對收入的影響,戰爭、自然災害對GDP的影響,這種“量化”通常是通過引入“啞變量”來完成的。根據這些因素的屬性類型,構造只取“0”或“1”的人工變量
1、離散特征的取值之間沒有大小的意義,比如color:[red,blue],那么就使用one-hot編碼
2、離散特征的取值有大小的意義,比如size:[X,XL,XXL],那么就使用數值的映射{X:1,XL:2,XXL:3}
df = pd.DataFrame([ ['green', 'M', 10.1, 'class1'], ['red', 'L', 13.5, 'class2'], ['blue', 'XL', 15.3, 'class1']]) df.columns = ['color', 'size', 'prize', 'class label'] size_mapping = { 'XL': 3, 'L': 2, 'M': 1} df['size'] = df['size'].map(size_mapping) # class_mapping = {label: idx for idx, label in enumerate(set(df['class label']))} df['class label'] = df['class label'].map(class_mapping) print(df) print(pd.get_dummies(df))