├── README.md
├── wine.data
└── DimensionalityReduction.ipynb
/README.md:
--------------------------------------------------------------------------------
1 | # DimensionalityReduction
2 | PCA和LDA进行数据降维
3 | # 使用PCA对数据进行降维,我们使用两种方式:
4 | * 直接按数学推导的方式实现PCA
5 | * 使用sklearn实现PCA
6 | * 利用降维后的特征进行逻辑回归分类
7 | # 代码使用LDA对数据进行降维,我们使用两种方式:
8 | * 直接按数学推导过程实现LDA
9 | * 使用sklearn实现LDA
10 | * 利用降维后的特征进行逻辑回归分类
11 |
12 |
--------------------------------------------------------------------------------
/wine.data:
--------------------------------------------------------------------------------
1 | 1,14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065
2 | 1,13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050
3 | 1,13.16,2.36,2.67,18.6,101,2.8,3.24,.3,2.81,5.68,1.03,3.17,1185
4 | 1,14.37,1.95,2.5,16.8,113,3.85,3.49,.24,2.18,7.8,.86,3.45,1480
5 | 1,13.24,2.59,2.87,21,118,2.8,2.69,.39,1.82,4.32,1.04,2.93,735
6 | 1,14.2,1.76,2.45,15.2,112,3.27,3.39,.34,1.97,6.75,1.05,2.85,1450
7 | 1,14.39,1.87,2.45,14.6,96,2.5,2.52,.3,1.98,5.25,1.02,3.58,1290
8 | 1,14.06,2.15,2.61,17.6,121,2.6,2.51,.31,1.25,5.05,1.06,3.58,1295
9 | 1,14.83,1.64,2.17,14,97,2.8,2.98,.29,1.98,5.2,1.08,2.85,1045
10 | 1,13.86,1.35,2.27,16,98,2.98,3.15,.22,1.85,7.22,1.01,3.55,1045
11 | 1,14.1,2.16,2.3,18,105,2.95,3.32,.22,2.38,5.75,1.25,3.17,1510
12 | 1,14.12,1.48,2.32,16.8,95,2.2,2.43,.26,1.57,5,1.17,2.82,1280
13 | 1,13.75,1.73,2.41,16,89,2.6,2.76,.29,1.81,5.6,1.15,2.9,1320
14 | 1,14.75,1.73,2.39,11.4,91,3.1,3.69,.43,2.81,5.4,1.25,2.73,1150
15 | 1,14.38,1.87,2.38,12,102,3.3,3.64,.29,2.96,7.5,1.2,3,1547
16 | 1,13.63,1.81,2.7,17.2,112,2.85,2.91,.3,1.46,7.3,1.28,2.88,1310
17 | 1,14.3,1.92,2.72,20,120,2.8,3.14,.33,1.97,6.2,1.07,2.65,1280
18 | 1,13.83,1.57,2.62,20,115,2.95,3.4,.4,1.72,6.6,1.13,2.57,1130
19 | 1,14.19,1.59,2.48,16.5,108,3.3,3.93,.32,1.86,8.7,1.23,2.82,1680
20 | 1,13.64,3.1,2.56,15.2,116,2.7,3.03,.17,1.66,5.1,.96,3.36,845
21 | 1,14.06,1.63,2.28,16,126,3,3.17,.24,2.1,5.65,1.09,3.71,780
22 | 1,12.93,3.8,2.65,18.6,102,2.41,2.41,.25,1.98,4.5,1.03,3.52,770
23 | 1,13.71,1.86,2.36,16.6,101,2.61,2.88,.27,1.69,3.8,1.11,4,1035
24 | 1,12.85,1.6,2.52,17.8,95,2.48,2.37,.26,1.46,3.93,1.09,3.63,1015
25 | 1,13.5,1.81,2.61,20,96,2.53,2.61,.28,1.66,3.52,1.12,3.82,845
26 | 1,13.05,2.05,3.22,25,124,2.63,2.68,.47,1.92,3.58,1.13,3.2,830
27 | 1,13.39,1.77,2.62,16.1,93,2.85,2.94,.34,1.45,4.8,.92,3.22,1195
28 | 1,13.3,1.72,2.14,17,94,2.4,2.19,.27,1.35,3.95,1.02,2.77,1285
29 | 1,13.87,1.9,2.8,19.4,107,2.95,2.97,.37,1.76,4.5,1.25,3.4,915
30 | 1,14.02,1.68,2.21,16,96,2.65,2.33,.26,1.98,4.7,1.04,3.59,1035
31 | 1,13.73,1.5,2.7,22.5,101,3,3.25,.29,2.38,5.7,1.19,2.71,1285
32 | 1,13.58,1.66,2.36,19.1,106,2.86,3.19,.22,1.95,6.9,1.09,2.88,1515
33 | 1,13.68,1.83,2.36,17.2,104,2.42,2.69,.42,1.97,3.84,1.23,2.87,990
34 | 1,13.76,1.53,2.7,19.5,132,2.95,2.74,.5,1.35,5.4,1.25,3,1235
35 | 1,13.51,1.8,2.65,19,110,2.35,2.53,.29,1.54,4.2,1.1,2.87,1095
36 | 1,13.48,1.81,2.41,20.5,100,2.7,2.98,.26,1.86,5.1,1.04,3.47,920
37 | 1,13.28,1.64,2.84,15.5,110,2.6,2.68,.34,1.36,4.6,1.09,2.78,880
38 | 1,13.05,1.65,2.55,18,98,2.45,2.43,.29,1.44,4.25,1.12,2.51,1105
39 | 1,13.07,1.5,2.1,15.5,98,2.4,2.64,.28,1.37,3.7,1.18,2.69,1020
40 | 1,14.22,3.99,2.51,13.2,128,3,3.04,.2,2.08,5.1,.89,3.53,760
41 | 1,13.56,1.71,2.31,16.2,117,3.15,3.29,.34,2.34,6.13,.95,3.38,795
42 | 1,13.41,3.84,2.12,18.8,90,2.45,2.68,.27,1.48,4.28,.91,3,1035
43 | 1,13.88,1.89,2.59,15,101,3.25,3.56,.17,1.7,5.43,.88,3.56,1095
44 | 1,13.24,3.98,2.29,17.5,103,2.64,2.63,.32,1.66,4.36,.82,3,680
45 | 1,13.05,1.77,2.1,17,107,3,3,.28,2.03,5.04,.88,3.35,885
46 | 1,14.21,4.04,2.44,18.9,111,2.85,2.65,.3,1.25,5.24,.87,3.33,1080
47 | 1,14.38,3.59,2.28,16,102,3.25,3.17,.27,2.19,4.9,1.04,3.44,1065
48 | 1,13.9,1.68,2.12,16,101,3.1,3.39,.21,2.14,6.1,.91,3.33,985
49 | 1,14.1,2.02,2.4,18.8,103,2.75,2.92,.32,2.38,6.2,1.07,2.75,1060
50 | 1,13.94,1.73,2.27,17.4,108,2.88,3.54,.32,2.08,8.90,1.12,3.1,1260
51 | 1,13.05,1.73,2.04,12.4,92,2.72,3.27,.17,2.91,7.2,1.12,2.91,1150
52 | 1,13.83,1.65,2.6,17.2,94,2.45,2.99,.22,2.29,5.6,1.24,3.37,1265
53 | 1,13.82,1.75,2.42,14,111,3.88,3.74,.32,1.87,7.05,1.01,3.26,1190
54 | 1,13.77,1.9,2.68,17.1,115,3,2.79,.39,1.68,6.3,1.13,2.93,1375
55 | 1,13.74,1.67,2.25,16.4,118,2.6,2.9,.21,1.62,5.85,.92,3.2,1060
56 | 1,13.56,1.73,2.46,20.5,116,2.96,2.78,.2,2.45,6.25,.98,3.03,1120
57 | 1,14.22,1.7,2.3,16.3,118,3.2,3,.26,2.03,6.38,.94,3.31,970
58 | 1,13.29,1.97,2.68,16.8,102,3,3.23,.31,1.66,6,1.07,2.84,1270
59 | 1,13.72,1.43,2.5,16.7,108,3.4,3.67,.19,2.04,6.8,.89,2.87,1285
60 | 2,12.37,.94,1.36,10.6,88,1.98,.57,.28,.42,1.95,1.05,1.82,520
61 | 2,12.33,1.1,2.28,16,101,2.05,1.09,.63,.41,3.27,1.25,1.67,680
62 | 2,12.64,1.36,2.02,16.8,100,2.02,1.41,.53,.62,5.75,.98,1.59,450
63 | 2,13.67,1.25,1.92,18,94,2.1,1.79,.32,.73,3.8,1.23,2.46,630
64 | 2,12.37,1.13,2.16,19,87,3.5,3.1,.19,1.87,4.45,1.22,2.87,420
65 | 2,12.17,1.45,2.53,19,104,1.89,1.75,.45,1.03,2.95,1.45,2.23,355
66 | 2,12.37,1.21,2.56,18.1,98,2.42,2.65,.37,2.08,4.6,1.19,2.3,678
67 | 2,13.11,1.01,1.7,15,78,2.98,3.18,.26,2.28,5.3,1.12,3.18,502
68 | 2,12.37,1.17,1.92,19.6,78,2.11,2,.27,1.04,4.68,1.12,3.48,510
69 | 2,13.34,.94,2.36,17,110,2.53,1.3,.55,.42,3.17,1.02,1.93,750
70 | 2,12.21,1.19,1.75,16.8,151,1.85,1.28,.14,2.5,2.85,1.28,3.07,718
71 | 2,12.29,1.61,2.21,20.4,103,1.1,1.02,.37,1.46,3.05,.906,1.82,870
72 | 2,13.86,1.51,2.67,25,86,2.95,2.86,.21,1.87,3.38,1.36,3.16,410
73 | 2,13.49,1.66,2.24,24,87,1.88,1.84,.27,1.03,3.74,.98,2.78,472
74 | 2,12.99,1.67,2.6,30,139,3.3,2.89,.21,1.96,3.35,1.31,3.5,985
75 | 2,11.96,1.09,2.3,21,101,3.38,2.14,.13,1.65,3.21,.99,3.13,886
76 | 2,11.66,1.88,1.92,16,97,1.61,1.57,.34,1.15,3.8,1.23,2.14,428
77 | 2,13.03,.9,1.71,16,86,1.95,2.03,.24,1.46,4.6,1.19,2.48,392
78 | 2,11.84,2.89,2.23,18,112,1.72,1.32,.43,.95,2.65,.96,2.52,500
79 | 2,12.33,.99,1.95,14.8,136,1.9,1.85,.35,2.76,3.4,1.06,2.31,750
80 | 2,12.7,3.87,2.4,23,101,2.83,2.55,.43,1.95,2.57,1.19,3.13,463
81 | 2,12,.92,2,19,86,2.42,2.26,.3,1.43,2.5,1.38,3.12,278
82 | 2,12.72,1.81,2.2,18.8,86,2.2,2.53,.26,1.77,3.9,1.16,3.14,714
83 | 2,12.08,1.13,2.51,24,78,2,1.58,.4,1.4,2.2,1.31,2.72,630
84 | 2,13.05,3.86,2.32,22.5,85,1.65,1.59,.61,1.62,4.8,.84,2.01,515
85 | 2,11.84,.89,2.58,18,94,2.2,2.21,.22,2.35,3.05,.79,3.08,520
86 | 2,12.67,.98,2.24,18,99,2.2,1.94,.3,1.46,2.62,1.23,3.16,450
87 | 2,12.16,1.61,2.31,22.8,90,1.78,1.69,.43,1.56,2.45,1.33,2.26,495
88 | 2,11.65,1.67,2.62,26,88,1.92,1.61,.4,1.34,2.6,1.36,3.21,562
89 | 2,11.64,2.06,2.46,21.6,84,1.95,1.69,.48,1.35,2.8,1,2.75,680
90 | 2,12.08,1.33,2.3,23.6,70,2.2,1.59,.42,1.38,1.74,1.07,3.21,625
91 | 2,12.08,1.83,2.32,18.5,81,1.6,1.5,.52,1.64,2.4,1.08,2.27,480
92 | 2,12,1.51,2.42,22,86,1.45,1.25,.5,1.63,3.6,1.05,2.65,450
93 | 2,12.69,1.53,2.26,20.7,80,1.38,1.46,.58,1.62,3.05,.96,2.06,495
94 | 2,12.29,2.83,2.22,18,88,2.45,2.25,.25,1.99,2.15,1.15,3.3,290
95 | 2,11.62,1.99,2.28,18,98,3.02,2.26,.17,1.35,3.25,1.16,2.96,345
96 | 2,12.47,1.52,2.2,19,162,2.5,2.27,.32,3.28,2.6,1.16,2.63,937
97 | 2,11.81,2.12,2.74,21.5,134,1.6,.99,.14,1.56,2.5,.95,2.26,625
98 | 2,12.29,1.41,1.98,16,85,2.55,2.5,.29,1.77,2.9,1.23,2.74,428
99 | 2,12.37,1.07,2.1,18.5,88,3.52,3.75,.24,1.95,4.5,1.04,2.77,660
100 | 2,12.29,3.17,2.21,18,88,2.85,2.99,.45,2.81,2.3,1.42,2.83,406
101 | 2,12.08,2.08,1.7,17.5,97,2.23,2.17,.26,1.4,3.3,1.27,2.96,710
102 | 2,12.6,1.34,1.9,18.5,88,1.45,1.36,.29,1.35,2.45,1.04,2.77,562
103 | 2,12.34,2.45,2.46,21,98,2.56,2.11,.34,1.31,2.8,.8,3.38,438
104 | 2,11.82,1.72,1.88,19.5,86,2.5,1.64,.37,1.42,2.06,.94,2.44,415
105 | 2,12.51,1.73,1.98,20.5,85,2.2,1.92,.32,1.48,2.94,1.04,3.57,672
106 | 2,12.42,2.55,2.27,22,90,1.68,1.84,.66,1.42,2.7,.86,3.3,315
107 | 2,12.25,1.73,2.12,19,80,1.65,2.03,.37,1.63,3.4,1,3.17,510
108 | 2,12.72,1.75,2.28,22.5,84,1.38,1.76,.48,1.63,3.3,.88,2.42,488
109 | 2,12.22,1.29,1.94,19,92,2.36,2.04,.39,2.08,2.7,.86,3.02,312
110 | 2,11.61,1.35,2.7,20,94,2.74,2.92,.29,2.49,2.65,.96,3.26,680
111 | 2,11.46,3.74,1.82,19.5,107,3.18,2.58,.24,3.58,2.9,.75,2.81,562
112 | 2,12.52,2.43,2.17,21,88,2.55,2.27,.26,1.22,2,.9,2.78,325
113 | 2,11.76,2.68,2.92,20,103,1.75,2.03,.6,1.05,3.8,1.23,2.5,607
114 | 2,11.41,.74,2.5,21,88,2.48,2.01,.42,1.44,3.08,1.1,2.31,434
115 | 2,12.08,1.39,2.5,22.5,84,2.56,2.29,.43,1.04,2.9,.93,3.19,385
116 | 2,11.03,1.51,2.2,21.5,85,2.46,2.17,.52,2.01,1.9,1.71,2.87,407
117 | 2,11.82,1.47,1.99,20.8,86,1.98,1.6,.3,1.53,1.95,.95,3.33,495
118 | 2,12.42,1.61,2.19,22.5,108,2,2.09,.34,1.61,2.06,1.06,2.96,345
119 | 2,12.77,3.43,1.98,16,80,1.63,1.25,.43,.83,3.4,.7,2.12,372
120 | 2,12,3.43,2,19,87,2,1.64,.37,1.87,1.28,.93,3.05,564
121 | 2,11.45,2.4,2.42,20,96,2.9,2.79,.32,1.83,3.25,.8,3.39,625
122 | 2,11.56,2.05,3.23,28.5,119,3.18,5.08,.47,1.87,6,.93,3.69,465
123 | 2,12.42,4.43,2.73,26.5,102,2.2,2.13,.43,1.71,2.08,.92,3.12,365
124 | 2,13.05,5.8,2.13,21.5,86,2.62,2.65,.3,2.01,2.6,.73,3.1,380
125 | 2,11.87,4.31,2.39,21,82,2.86,3.03,.21,2.91,2.8,.75,3.64,380
126 | 2,12.07,2.16,2.17,21,85,2.6,2.65,.37,1.35,2.76,.86,3.28,378
127 | 2,12.43,1.53,2.29,21.5,86,2.74,3.15,.39,1.77,3.94,.69,2.84,352
128 | 2,11.79,2.13,2.78,28.5,92,2.13,2.24,.58,1.76,3,.97,2.44,466
129 | 2,12.37,1.63,2.3,24.5,88,2.22,2.45,.4,1.9,2.12,.89,2.78,342
130 | 2,12.04,4.3,2.38,22,80,2.1,1.75,.42,1.35,2.6,.79,2.57,580
131 | 3,12.86,1.35,2.32,18,122,1.51,1.25,.21,.94,4.1,.76,1.29,630
132 | 3,12.88,2.99,2.4,20,104,1.3,1.22,.24,.83,5.4,.74,1.42,530
133 | 3,12.81,2.31,2.4,24,98,1.15,1.09,.27,.83,5.7,.66,1.36,560
134 | 3,12.7,3.55,2.36,21.5,106,1.7,1.2,.17,.84,5,.78,1.29,600
135 | 3,12.51,1.24,2.25,17.5,85,2,.58,.6,1.25,5.45,.75,1.51,650
136 | 3,12.6,2.46,2.2,18.5,94,1.62,.66,.63,.94,7.1,.73,1.58,695
137 | 3,12.25,4.72,2.54,21,89,1.38,.47,.53,.8,3.85,.75,1.27,720
138 | 3,12.53,5.51,2.64,25,96,1.79,.6,.63,1.1,5,.82,1.69,515
139 | 3,13.49,3.59,2.19,19.5,88,1.62,.48,.58,.88,5.7,.81,1.82,580
140 | 3,12.84,2.96,2.61,24,101,2.32,.6,.53,.81,4.92,.89,2.15,590
141 | 3,12.93,2.81,2.7,21,96,1.54,.5,.53,.75,4.6,.77,2.31,600
142 | 3,13.36,2.56,2.35,20,89,1.4,.5,.37,.64,5.6,.7,2.47,780
143 | 3,13.52,3.17,2.72,23.5,97,1.55,.52,.5,.55,4.35,.89,2.06,520
144 | 3,13.62,4.95,2.35,20,92,2,.8,.47,1.02,4.4,.91,2.05,550
145 | 3,12.25,3.88,2.2,18.5,112,1.38,.78,.29,1.14,8.21,.65,2,855
146 | 3,13.16,3.57,2.15,21,102,1.5,.55,.43,1.3,4,.6,1.68,830
147 | 3,13.88,5.04,2.23,20,80,.98,.34,.4,.68,4.9,.58,1.33,415
148 | 3,12.87,4.61,2.48,21.5,86,1.7,.65,.47,.86,7.65,.54,1.86,625
149 | 3,13.32,3.24,2.38,21.5,92,1.93,.76,.45,1.25,8.42,.55,1.62,650
150 | 3,13.08,3.9,2.36,21.5,113,1.41,1.39,.34,1.14,9.40,.57,1.33,550
151 | 3,13.5,3.12,2.62,24,123,1.4,1.57,.22,1.25,8.60,.59,1.3,500
152 | 3,12.79,2.67,2.48,22,112,1.48,1.36,.24,1.26,10.8,.48,1.47,480
153 | 3,13.11,1.9,2.75,25.5,116,2.2,1.28,.26,1.56,7.1,.61,1.33,425
154 | 3,13.23,3.3,2.28,18.5,98,1.8,.83,.61,1.87,10.52,.56,1.51,675
155 | 3,12.58,1.29,2.1,20,103,1.48,.58,.53,1.4,7.6,.58,1.55,640
156 | 3,13.17,5.19,2.32,22,93,1.74,.63,.61,1.55,7.9,.6,1.48,725
157 | 3,13.84,4.12,2.38,19.5,89,1.8,.83,.48,1.56,9.01,.57,1.64,480
158 | 3,12.45,3.03,2.64,27,97,1.9,.58,.63,1.14,7.5,.67,1.73,880
159 | 3,14.34,1.68,2.7,25,98,2.8,1.31,.53,2.7,13,.57,1.96,660
160 | 3,13.48,1.67,2.64,22.5,89,2.6,1.1,.52,2.29,11.75,.57,1.78,620
161 | 3,12.36,3.83,2.38,21,88,2.3,.92,.5,1.04,7.65,.56,1.58,520
162 | 3,13.69,3.26,2.54,20,107,1.83,.56,.5,.8,5.88,.96,1.82,680
163 | 3,12.85,3.27,2.58,22,106,1.65,.6,.6,.96,5.58,.87,2.11,570
164 | 3,12.96,3.45,2.35,18.5,106,1.39,.7,.4,.94,5.28,.68,1.75,675
165 | 3,13.78,2.76,2.3,22,90,1.35,.68,.41,1.03,9.58,.7,1.68,615
166 | 3,13.73,4.36,2.26,22.5,88,1.28,.47,.52,1.15,6.62,.78,1.75,520
167 | 3,13.45,3.7,2.6,23,111,1.7,.92,.43,1.46,10.68,.85,1.56,695
168 | 3,12.82,3.37,2.3,19.5,88,1.48,.66,.4,.97,10.26,.72,1.75,685
169 | 3,13.58,2.58,2.69,24.5,105,1.55,.84,.39,1.54,8.66,.74,1.8,750
170 | 3,13.4,4.6,2.86,25,112,1.98,.96,.27,1.11,8.5,.67,1.92,630
171 | 3,12.2,3.03,2.32,19,96,1.25,.49,.4,.73,5.5,.66,1.83,510
172 | 3,12.77,2.39,2.28,19.5,86,1.39,.51,.48,.64,9.899999,.57,1.63,470
173 | 3,14.16,2.51,2.48,20,91,1.68,.7,.44,1.24,9.7,.62,1.71,660
174 | 3,13.71,5.65,2.45,20.5,95,1.68,.61,.52,1.06,7.7,.64,1.74,740
175 | 3,13.4,3.91,2.48,23,102,1.8,.75,.43,1.41,7.3,.7,1.56,750
176 | 3,13.27,4.28,2.26,20,120,1.59,.69,.43,1.35,10.2,.59,1.56,835
177 | 3,13.17,2.59,2.37,20,120,1.65,.68,.53,1.46,9.3,.6,1.62,840
178 | 3,14.13,4.1,2.74,24.5,96,2.05,.76,.56,1.35,9.2,.61,1.6,560
179 |
--------------------------------------------------------------------------------
/DimensionalityReduction.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": []
7 | },
8 | {
9 | "cell_type": "code",
10 | "execution_count": 1,
11 | "metadata": {},
12 | "outputs": [
13 | {
14 | "name": "stderr",
15 | "output_type": "stream",
16 | "text": [
17 | "/Users/yaoxiaoying/.py3virtualEnv/ai/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216, got 192\n",
18 | " return f(*args, **kwds)\n"
19 | ]
20 | }
21 | ],
22 | "source": [
23 | "import numpy as np\n",
24 | "import pandas as pd\n",
25 | "import matplotlib.pyplot as plt\n",
26 | "from sklearn.preprocessing import StandardScaler\n",
27 | "from sklearn.model_selection import train_test_split\n",
28 | "from sklearn.decomposition import PCA\n",
29 | "from matplotlib.colors import ListedColormap\n",
30 | "from sklearn.linear_model import LogisticRegression"
31 | ]
32 | },
33 | {
34 | "cell_type": "markdown",
35 | "metadata": {},
36 | "source": [
37 | "# 数据获取"
38 | ]
39 | },
40 | {
41 | "cell_type": "code",
42 | "execution_count": 6,
43 | "metadata": {},
44 | "outputs": [],
45 | "source": [
46 | "# 读取数据()\n",
47 | "df_wine = pd.read_csv('wine.data',header=None)"
48 | ]
49 | },
50 | {
51 | "cell_type": "markdown",
52 | "metadata": {},
53 | "source": [
54 | "该数据集是UCI的公开数据集,是对意大利同一地区种植的葡萄酒进行分析的结果,数据集共14列数据,第一个属性是类标识符,分别是1/2/3来表示,代表葡萄酒的三个分类。剩余的13个属性是,酒精、苹果酸、灰、灰分的碱度、镁、总酚、黄酮类化合物、非黄烷类酚类、原花色素、颜色强度、色调等。"
55 | ]
56 | },
57 | {
58 | "cell_type": "code",
59 | "execution_count": 7,
60 | "metadata": {},
61 | "outputs": [],
62 | "source": [
63 | "# 设置列索引\n",
64 | "df_wine.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash',\n",
65 | " 'Alcalinity of ash', 'Magnesium', 'Total phenols',\n",
66 | " 'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins',\n",
67 | " 'Color intensity', 'Hue',\n",
68 | " 'OD280/OD315 of diluted wines', 'Proline']"
69 | ]
70 | },
71 | {
72 | "cell_type": "code",
73 | "execution_count": 10,
74 | "metadata": {},
75 | "outputs": [
76 | {
77 | "data": {
78 | "text/plain": [
79 | "(178, 14)"
80 | ]
81 | },
82 | "execution_count": 10,
83 | "metadata": {},
84 | "output_type": "execute_result"
85 | }
86 | ],
87 | "source": [
88 | "# 数据维度\n",
89 | "df_wine.shape"
90 | ]
91 | },
92 | {
93 | "cell_type": "code",
94 | "execution_count": 11,
95 | "metadata": {},
96 | "outputs": [
97 | {
98 | "data": {
99 | "text/plain": [
100 | "2 71\n",
101 | "1 59\n",
102 | "3 48\n",
103 | "Name: Class label, dtype: int64"
104 | ]
105 | },
106 | "execution_count": 11,
107 | "metadata": {},
108 | "output_type": "execute_result"
109 | }
110 | ],
111 | "source": [
112 | "# 每一类数据包含的样本个数\n",
113 | "df_wine['Class label'].value_counts()"
114 | ]
115 | },
116 | {
117 | "cell_type": "code",
118 | "execution_count": 12,
119 | "metadata": {},
120 | "outputs": [
121 | {
122 | "data": {
123 | "text/html": [
124 | "
\n",
125 | "\n",
138 | "
\n",
139 | " \n",
140 | " \n",
141 | " | \n",
142 | " Class label | \n",
143 | " Alcohol | \n",
144 | " Malic acid | \n",
145 | " Ash | \n",
146 | " Alcalinity of ash | \n",
147 | " Magnesium | \n",
148 | " Total phenols | \n",
149 | " Flavanoids | \n",
150 | " Nonflavanoid phenols | \n",
151 | " Proanthocyanins | \n",
152 | " Color intensity | \n",
153 | " Hue | \n",
154 | " OD280/OD315 of diluted wines | \n",
155 | " Proline | \n",
156 | "
\n",
157 | " \n",
158 | " \n",
159 | " \n",
160 | " | 0 | \n",
161 | " 1 | \n",
162 | " 14.23 | \n",
163 | " 1.71 | \n",
164 | " 2.43 | \n",
165 | " 15.6 | \n",
166 | " 127 | \n",
167 | " 2.80 | \n",
168 | " 3.06 | \n",
169 | " 0.28 | \n",
170 | " 2.29 | \n",
171 | " 5.64 | \n",
172 | " 1.04 | \n",
173 | " 3.92 | \n",
174 | " 1065 | \n",
175 | "
\n",
176 | " \n",
177 | " | 1 | \n",
178 | " 1 | \n",
179 | " 13.20 | \n",
180 | " 1.78 | \n",
181 | " 2.14 | \n",
182 | " 11.2 | \n",
183 | " 100 | \n",
184 | " 2.65 | \n",
185 | " 2.76 | \n",
186 | " 0.26 | \n",
187 | " 1.28 | \n",
188 | " 4.38 | \n",
189 | " 1.05 | \n",
190 | " 3.40 | \n",
191 | " 1050 | \n",
192 | "
\n",
193 | " \n",
194 | " | 2 | \n",
195 | " 1 | \n",
196 | " 13.16 | \n",
197 | " 2.36 | \n",
198 | " 2.67 | \n",
199 | " 18.6 | \n",
200 | " 101 | \n",
201 | " 2.80 | \n",
202 | " 3.24 | \n",
203 | " 0.30 | \n",
204 | " 2.81 | \n",
205 | " 5.68 | \n",
206 | " 1.03 | \n",
207 | " 3.17 | \n",
208 | " 1185 | \n",
209 | "
\n",
210 | " \n",
211 | " | 3 | \n",
212 | " 1 | \n",
213 | " 14.37 | \n",
214 | " 1.95 | \n",
215 | " 2.50 | \n",
216 | " 16.8 | \n",
217 | " 113 | \n",
218 | " 3.85 | \n",
219 | " 3.49 | \n",
220 | " 0.24 | \n",
221 | " 2.18 | \n",
222 | " 7.80 | \n",
223 | " 0.86 | \n",
224 | " 3.45 | \n",
225 | " 1480 | \n",
226 | "
\n",
227 | " \n",
228 | " | 4 | \n",
229 | " 1 | \n",
230 | " 13.24 | \n",
231 | " 2.59 | \n",
232 | " 2.87 | \n",
233 | " 21.0 | \n",
234 | " 118 | \n",
235 | " 2.80 | \n",
236 | " 2.69 | \n",
237 | " 0.39 | \n",
238 | " 1.82 | \n",
239 | " 4.32 | \n",
240 | " 1.04 | \n",
241 | " 2.93 | \n",
242 | " 735 | \n",
243 | "
\n",
244 | " \n",
245 | "
\n",
246 | "
"
247 | ],
248 | "text/plain": [
249 | " Class label Alcohol Malic acid Ash Alcalinity of ash Magnesium \\\n",
250 | "0 1 14.23 1.71 2.43 15.6 127 \n",
251 | "1 1 13.20 1.78 2.14 11.2 100 \n",
252 | "2 1 13.16 2.36 2.67 18.6 101 \n",
253 | "3 1 14.37 1.95 2.50 16.8 113 \n",
254 | "4 1 13.24 2.59 2.87 21.0 118 \n",
255 | "\n",
256 | " Total phenols Flavanoids Nonflavanoid phenols Proanthocyanins \\\n",
257 | "0 2.80 3.06 0.28 2.29 \n",
258 | "1 2.65 2.76 0.26 1.28 \n",
259 | "2 2.80 3.24 0.30 2.81 \n",
260 | "3 3.85 3.49 0.24 2.18 \n",
261 | "4 2.80 2.69 0.39 1.82 \n",
262 | "\n",
263 | " Color intensity Hue OD280/OD315 of diluted wines Proline \n",
264 | "0 5.64 1.04 3.92 1065 \n",
265 | "1 4.38 1.05 3.40 1050 \n",
266 | "2 5.68 1.03 3.17 1185 \n",
267 | "3 7.80 0.86 3.45 1480 \n",
268 | "4 4.32 1.04 2.93 735 "
269 | ]
270 | },
271 | "execution_count": 12,
272 | "metadata": {},
273 | "output_type": "execute_result"
274 | }
275 | ],
276 | "source": [
277 | "df_wine.head()"
278 | ]
279 | },
280 | {
281 | "cell_type": "markdown",
282 | "metadata": {},
283 | "source": [
284 | "# 数据集划分"
285 | ]
286 | },
287 | {
288 | "cell_type": "code",
289 | "execution_count": 13,
290 | "metadata": {},
291 | "outputs": [],
292 | "source": [
293 | "# 数据集设置:X为样本特征数据,y为目标数据,即标注结果\n",
294 | "X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values"
295 | ]
296 | },
297 | {
298 | "cell_type": "code",
299 | "execution_count": 14,
300 | "metadata": {},
301 | "outputs": [],
302 | "source": [
303 | "# 数据集划分: 将数据集划分为训练集和测试集数据(测试集数据为30%,训练集为70%)\n",
304 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,\n",
305 | " stratify=y,\n",
306 | " random_state=0)"
307 | ]
308 | },
309 | {
310 | "cell_type": "markdown",
311 | "metadata": {},
312 | "source": [
313 | "# 数据标准化"
314 | ]
315 | },
316 | {
317 | "cell_type": "code",
318 | "execution_count": 15,
319 | "metadata": {},
320 | "outputs": [],
321 | "source": [
322 | "# 实例化\n",
323 | "sc = StandardScaler()"
324 | ]
325 | },
326 | {
327 | "cell_type": "code",
328 | "execution_count": 16,
329 | "metadata": {},
330 | "outputs": [],
331 | "source": [
332 | "# 对数据集进行标准化(一般情况下我们在训练集中进行均值和方差的计算,直接在测试集中使用)\n",
333 | "X_train_std = sc.fit_transform(X_train)\n",
334 | "X_test_std = sc.transform(X_test)"
335 | ]
336 | },
337 | {
338 | "cell_type": "markdown",
339 | "metadata": {},
340 | "source": [
341 | "# PCA(Pricipal component analysis)"
342 | ]
343 | },
344 | {
345 | "cell_type": "markdown",
346 | "metadata": {},
347 | "source": [
348 | "## PCA实现"
349 | ]
350 | },
351 | {
352 | "cell_type": "markdown",
353 | "metadata": {},
354 | "source": [
355 | "### 特征值计算"
356 | ]
357 | },
358 | {
359 | "cell_type": "code",
360 | "execution_count": 18,
361 | "metadata": {},
362 | "outputs": [],
363 | "source": [
364 | "# 计算协方差矩阵\n",
365 | "cov_mat = np.cov(X_train_std.T)"
366 | ]
367 | },
368 | {
369 | "cell_type": "code",
370 | "execution_count": 19,
371 | "metadata": {},
372 | "outputs": [],
373 | "source": [
374 | "# 对协方差矩阵进行特征值分解\n",
375 | "eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)"
376 | ]
377 | },
378 | {
379 | "cell_type": "code",
380 | "execution_count": 20,
381 | "metadata": {},
382 | "outputs": [
383 | {
384 | "data": {
385 | "text/plain": [
386 | "array([4.84274532, 2.41602459, 1.54845825, 0.96120438, 0.84166161,\n",
387 | " 0.6620634 , 0.51828472, 0.34650377, 0.3131368 , 0.10754642,\n",
388 | " 0.21357215, 0.15362835, 0.1808613 ])"
389 | ]
390 | },
391 | "execution_count": 20,
392 | "metadata": {},
393 | "output_type": "execute_result"
394 | }
395 | ],
396 | "source": [
397 | "# 特征值\n",
398 | "eigen_vals"
399 | ]
400 | },
401 | {
402 | "cell_type": "markdown",
403 | "metadata": {},
404 | "source": [
405 | "### 特征值分布"
406 | ]
407 | },
408 | {
409 | "cell_type": "code",
410 | "execution_count": 21,
411 | "metadata": {},
412 | "outputs": [],
413 | "source": [
414 | "# 特征值之和\n",
415 | "tot = sum(eigen_vals)"
416 | ]
417 | },
418 | {
419 | "cell_type": "code",
420 | "execution_count": 23,
421 | "metadata": {},
422 | "outputs": [],
423 | "source": [
424 | "# 对特征进行排序,并计算所占的比例\n",
425 | "var_exp = [(i / tot) for i in sorted(eigen_vals, reverse=True)]"
426 | ]
427 | },
428 | {
429 | "cell_type": "code",
430 | "execution_count": 24,
431 | "metadata": {},
432 | "outputs": [],
433 | "source": [
434 | "# 累计求和\n",
435 | "cum_var_exp = np.cumsum(var_exp)"
436 | ]
437 | },
438 | {
439 | "cell_type": "code",
440 | "execution_count": 25,
441 | "metadata": {},
442 | "outputs": [
443 | {
444 | "data": {
445 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAdPUlEQVR4nO3de3hU9b3v8feXgAkXQYhBo4BIUbmIoDtaEVQIoFWDHuzxSLsVtFLFFrUoskXo2V4fH1tadW91V6yt0iP1CkVxe0HQCkhVKBjReIGtaBBKuEYqRC7f88csYoiBmSSzMmtmPq/n8cmamd/MfNdY59PfWmu+P3N3REREoqZZqgsQERGpiwJKREQiSQElIiKRpIASEZFIUkCJiEgkNU91AfVx6KGHeteuXVNdhoiINMLSpUs3uHtBvHFpFVBdu3ZlyZIlqS5DREQawcxWJzJOh/hERCSSFFAiIhJJCigREYmktDoHVZedO3dSXl7Ojh07Ul1KxsjLy6NTp060aNEi1aWISBZL+4AqLy/n4IMPpmvXrphZqstJe+7Oxo0bKS8v5+ijj051OSKSxdL+EN+OHTvIz89XOCWJmZGfn68ZqYikXNoHFKBwSjJ9niISBaEGlJm1MLPnD/B4npnNMbN3zexPpm9GEREJhBZQZtYSWAoMO8CwS4Byd+8LtI8zVhrhs88+Y9euXQBs3ryZVatWpbgiEZEDC+0iCXffDpxgZisPMKwYeDbYng8MBl4Jq6awzJgxg9tuu43DDz+cLVu28NVXX9G5c2d27tzJUUcdxYwZMwBYtmwZs2bN4rbbbqt+7ujRo5kyZQrHHHPMPq959tlnM3PmTFq3bg3AsGHDmDt37nfee9SoUdx+++0ceeSRNG/+7b/OXbt2kZOTU3247tJLL2X8+PF07NiRt956i7feeotrr72W3bt3c+qpp5Kbm5v0z0VEmtaMtz5n9vI19X5eryPa8u/De4dQUeOk+hxUPrA12K4EOtQeYGZXmtkSM1tSUVHRpMUlqkWLFgwePJixY8dy/vnn079/f8aOHctll13GQQcdVD3uhBNO4KWXXmLdunX7PLfm5dwVFRU88MADtGjRgtatW/PYY48xePBgli9fztChQ/nhD39YPfbXv/41ffr0YdeuXZxzzjmUlJSQn59PSUkJ5557LqtXx7qJlJaWkp+fT2FhIWVlZXz88cc0a9aMDz/8kLKysuqZlYikt9nL1/DB2spUl5E0qb7MfAPQLthuF9zeh7tPA6YBFBUVHXB9+luff58Pvkzuv5xE/p+Fu1NYWEiPHj3Ytm0b27Zto0ePHmzZsoWFCxdWj8vJyeGNN94gLy9vv6/1/vvv89RTT/Hll18yefJk7rzzTkaPHk1JSQlz5sypHrd27Vo2bdpEly5dKCsrq55dDRo0aJ9xAJMnT6Z3796cfPLJTJo0iXXr1uHurFu3jhtvvLF6liYi4WjozKa+PlhbSa/Ctjx5Vf/Q36sppDqg5gFnETvMVwzck9pyGqZ9+/bMnz+fp59+mlWrVnHyySfzxhtvUFFRwZgxYwCYNWsWv/3tbzn++OMZO3YsP/vZz2jRogUfffQRK1asIDc3l5EjR7Jx40buvvtubr31ViZOnMjll1/O6tWr2bBhA/369aNNmzZcddVVXHrppUycOJH+/fuzaNEiLrzwQmbOnFld065du2jevDl//vOfWbVqFb179yYnJ4fKykoeffRRAF544QWiOisVySR7Zza9CtuG+j69CttyQb8jQ32PptRkAWVmRwM/d/cJNe5+HLjQzEqBd4kFVoOl6hjqkCFDeP311/n000854YQTaNmyJQcddBB9+vTh6quvBmD48OGMGDGCM888k759+7Jo0SIAxowZw5QpU9i7jMhnn31Gp06dyMnJYf78+Tz88MPV55bGjRvHDTfcQJcuXdi1axcXX3wx/fr1Iz8/n61bY0dK169fT0lJCVVVVbz00kv07duXe+65h9deew0zY/v27axcubJ67Pe+970m/rREoqGpZjWQeTObphJ6QLl79+Dvp8CEWo9VASVh1xC22bNns2bNGhYsWECrVq04/PDD+eqrr5g+fTqlpaXcd9991eei4l1Jv337diZNmsSbb75JcXExd9xxBwsWLMDM+Oijj1i2bBm//OUv6dChAwMGDKCsrGyf1+3YseM+h/h69erF119/XX177dq1/P73vwdg3bp19O+v/2AkOzXVrAYyb2bTVFJ9iC8jtG3blr59+9KrVy+OP/54/vKXv/CTn/yE/Px81q1bt8+FEgATJkzglltuoU2bNnW+3nnnnUdZWRnXX389mzdvJj8/n2uuuYZx48YxYcKE6tlWt27dGDduXL1q7dixIyNHjgRg8eLF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\n",
446 | "text/plain": [
447 | ""
448 | ]
449 | },
450 | "metadata": {
451 | "needs_background": "light"
452 | },
453 | "output_type": "display_data"
454 | }
455 | ],
456 | "source": [
457 | "# 绘制图像\n",
458 | "plt.figure()\n",
459 | "plt.bar(range(1, 14), var_exp, alpha=0.5, align='center',\n",
460 | " label='特征值分布')\n",
461 | "plt.step(range(1, 14), cum_var_exp, where='mid',\n",
462 | " label='累计特征值')\n",
463 | "plt.ylabel('特征值比例')\n",
464 | "plt.xlabel('特征index')\n",
465 | "plt.legend(loc='best')"
466 | ]
467 | },
468 | {
469 | "cell_type": "markdown",
470 | "metadata": {},
471 | "source": [
472 | "### 特征降维"
473 | ]
474 | },
475 | {
476 | "cell_type": "code",
477 | "execution_count": 26,
478 | "metadata": {},
479 | "outputs": [],
480 | "source": [
481 | "# 创建列表,由(eigenvalue, eigenvector)元组构成\n",
482 | "eigen_pairs = [(np.abs(eigen_vals[i]), eigen_vecs[:, i])\n",
483 | " for i in range(len(eigen_vals))]"
484 | ]
485 | },
486 | {
487 | "cell_type": "code",
488 | "execution_count": 27,
489 | "metadata": {},
490 | "outputs": [],
491 | "source": [
492 | "# 按特征值从大到小对列表(eigenvalue, eigenvector)排序\n",
493 | "eigen_pairs.sort(key=lambda k: k[0], reverse=True)"
494 | ]
495 | },
496 | {
497 | "cell_type": "code",
498 | "execution_count": 28,
499 | "metadata": {},
500 | "outputs": [
501 | {
502 | "data": {
503 | "text/plain": [
504 | "[(4.842745315655898,\n",
505 | " array([-0.13724218, 0.24724326, -0.02545159, 0.20694508, -0.15436582,\n",
506 | " -0.39376952, -0.41735106, 0.30572896, -0.30668347, 0.07554066,\n",
507 | " -0.32613263, -0.36861022, -0.29669651])),\n",
508 | " (2.4160245870352255,\n",
509 | " array([ 0.50303478, 0.16487119, 0.24456476, -0.11352904, 0.28974518,\n",
510 | " 0.05080104, -0.02287338, 0.09048885, 0.00835233, 0.54977581,\n",
511 | " -0.20716433, -0.24902536, 0.38022942])),\n",
512 | " (1.5484582488203513,\n",
513 | " array([-0.13774873, 0.09615039, 0.67777567, 0.62504055, 0.19613548,\n",
514 | " 0.14031057, 0.11705386, 0.13121778, 0.0304309 , -0.07992997,\n",
515 | " 0.05305915, 0.13239103, -0.07065022])),\n",
516 | " (0.9612043774977367,\n",
517 | " array([-0.0032961 , 0.56264669, -0.10897711, 0.0338187 , -0.36751107,\n",
518 | " 0.24024513, 0.1870533 , -0.02292622, 0.49626233, 0.10648294,\n",
519 | " -0.36905375, 0.14201609, -0.16768217])),\n",
520 | " (0.8416616104578422,\n",
521 | " array([-0.29062523, 0.08953787, -0.16083499, 0.05158734, 0.67648707,\n",
522 | " -0.11851114, -0.10710035, -0.50758161, 0.20163462, 0.00573607,\n",
523 | " -0.27691422, -0.06662756, -0.12802904])),\n",
524 | " (0.6620634040383039,\n",
525 | " array([ 2.99096847e-01, 6.27036396e-01, 3.89128239e-04, -4.05836452e-02,\n",
526 | " 6.57772614e-02, -5.89776247e-02, -3.01103180e-02, -2.71728086e-01,\n",
527 | " -4.39997519e-01, -4.11743459e-01, 1.41673377e-01, 1.75842384e-01,\n",
528 | " 1.38018388e-01])),\n",
529 | " (0.5182847213561953,\n",
530 | " array([ 0.07905293, -0.27400201, 0.13232805, 0.2239991 , -0.40526897,\n",
531 | " -0.03474194, 0.04178357, -0.63114569, -0.32312277, 0.26908262,\n",
532 | " -0.30264066, 0.13054014, 0.00081134])),\n",
533 | " (0.34650376641286657,\n",
534 | " array([-0.36817641, -0.01257758, 0.17757818, -0.44059211, 0.1166175 ,\n",
535 | " 0.35019213, 0.21871818, 0.19712942, -0.43305587, -0.06684118,\n",
536 | " -0.45976229, 0.11082755, 0.00560817])),\n",
537 | " (0.3131368004720887,\n",
538 | " array([-0.39837702, 0.11045823, 0.38249686, -0.24337385, -0.25898236,\n",
539 | " -0.34231286, -0.03612316, -0.17143688, 0.24437021, -0.15551492,\n",
540 | " 0.02119612, -0.23808956, 0.51727846])),\n",
541 | " (0.2135721466052733,\n",
542 | " array([ 0.37463888, -0.1374056 , 0.46158303, -0.41895399, 0.01004706,\n",
543 | " -0.22125424, -0.04175136, -0.08875695, 0.19992186, -0.22166887,\n",
544 | " -0.09846946, 0.01912058, -0.54253207])),\n",
545 | " (0.18086130479496634,\n",
546 | " array([ 0.26283426, -0.26676921, -0.11554255, 0.19948341, 0.02890188,\n",
547 | " -0.06638686, -0.21334908, 0.18639128, 0.16808299, -0.46636903,\n",
548 | " -0.53248388, 0.23783528, 0.36776336])),\n",
549 | " (0.15362835006711043,\n",
550 | " array([-0.12783451, 0.08064016, 0.01679249, -0.11084566, 0.07938796,\n",
551 | " -0.49145931, -0.0503074 , 0.17532803, -0.00367596, 0.35975654,\n",
552 | " 0.04046698, 0.74222954, 0.03873952])),\n",
553 | " (0.10754642369670996,\n",
554 | " array([-0.09448698, 0.02636524, 0.14274751, -0.13048578, -0.06760808,\n",
555 | " 0.45991766, -0.81458395, -0.09574809, 0.06724689, 0.08733362,\n",
556 | " 0.12906113, 0.18764627, 0.01211126]))]"
557 | ]
558 | },
559 | "execution_count": 28,
560 | "metadata": {},
561 | "output_type": "execute_result"
562 | }
563 | ],
564 | "source": [
565 | "# 特征值与特征向量\n",
566 | "eigen_pairs"
567 | ]
568 | },
569 | {
570 | "cell_type": "code",
571 | "execution_count": 29,
572 | "metadata": {},
573 | "outputs": [],
574 | "source": [
575 | "# 取前两个特征值对应的特征向量作为主要成分\n",
576 | "w = np.hstack((eigen_pairs[0][1][:, np.newaxis],\n",
577 | " eigen_pairs[1][1][:, np.newaxis]))"
578 | ]
579 | },
580 | {
581 | "cell_type": "code",
582 | "execution_count": 30,
583 | "metadata": {},
584 | "outputs": [
585 | {
586 | "data": {
587 | "text/plain": [
588 | "array([[-0.13724218, 0.50303478],\n",
589 | " [ 0.24724326, 0.16487119],\n",
590 | " [-0.02545159, 0.24456476],\n",
591 | " [ 0.20694508, -0.11352904],\n",
592 | " [-0.15436582, 0.28974518],\n",
593 | " [-0.39376952, 0.05080104],\n",
594 | " [-0.41735106, -0.02287338],\n",
595 | " [ 0.30572896, 0.09048885],\n",
596 | " [-0.30668347, 0.00835233],\n",
597 | " [ 0.07554066, 0.54977581],\n",
598 | " [-0.32613263, -0.20716433],\n",
599 | " [-0.36861022, -0.24902536],\n",
600 | " [-0.29669651, 0.38022942]])"
601 | ]
602 | },
603 | "execution_count": 30,
604 | "metadata": {},
605 | "output_type": "execute_result"
606 | }
607 | ],
608 | "source": [
609 | "w"
610 | ]
611 | },
612 | {
613 | "cell_type": "code",
614 | "execution_count": 31,
615 | "metadata": {},
616 | "outputs": [
617 | {
618 | "data": {
619 | "text/plain": [
620 | "array([ 0.71225893, 2.22048673, -0.13025864, 0.05962872, -0.50432733,\n",
621 | " -0.52831584, -1.24000033, 0.84118003, -1.05215112, -0.29218864,\n",
622 | " -0.20017028, -0.82164144, -0.62946362])"
623 | ]
624 | },
625 | "execution_count": 31,
626 | "metadata": {},
627 | "output_type": "execute_result"
628 | }
629 | ],
630 | "source": [
631 | "# 原始特征(以第一个样本为例)\n",
632 | "X_train_std[0]"
633 | ]
634 | },
635 | {
636 | "cell_type": "code",
637 | "execution_count": 32,
638 | "metadata": {},
639 | "outputs": [
640 | {
641 | "data": {
642 | "text/plain": [
643 | "array([2.38299011, 0.45458499])"
644 | ]
645 | },
646 | "execution_count": 32,
647 | "metadata": {},
648 | "output_type": "execute_result"
649 | }
650 | ],
651 | "source": [
652 | "# 特征压缩后结果\n",
653 | "X_train_std[0].dot(w)"
654 | ]
655 | },
656 | {
657 | "cell_type": "code",
658 | "execution_count": 33,
659 | "metadata": {},
660 | "outputs": [],
661 | "source": [
662 | "# 全部特征压缩\n",
663 | "X_train_pca = X_train_std.dot(w)"
664 | ]
665 | },
666 | {
667 | "cell_type": "code",
668 | "execution_count": 34,
669 | "metadata": {},
670 | "outputs": [
671 | {
672 | "data": {
673 | "image/png": "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\n",
674 | "text/plain": [
675 | ""
676 | ]
677 | },
678 | "metadata": {
679 | "needs_background": "light"
680 | },
681 | "output_type": "display_data"
682 | }
683 | ],
684 | "source": [
685 | "# 特征压缩后结果展示\n",
686 | "colors = ['r', 'b', 'g']\n",
687 | "markers = ['s', 'x', 'o']\n",
688 | "\n",
689 | "for l, c, m in zip(np.unique(y_train), colors, markers):\n",
690 | " # 按照样本的真实值进行展示\n",
691 | " plt.scatter(X_train_pca[y_train == l, 0], \n",
692 | " X_train_pca[y_train == l, 1], \n",
693 | " c=c, label=l, marker=m)\n",
694 | "\n",
695 | "plt.xlabel('PC 1')\n",
696 | "plt.ylabel('PC 2')\n",
697 | "plt.legend(loc='lower left')\n",
698 | "plt.tight_layout()\n",
699 | "plt.show()"
700 | ]
701 | },
702 | {
703 | "cell_type": "markdown",
704 | "metadata": {},
705 | "source": [
706 | "## 使用sklearn实现PCA"
707 | ]
708 | },
709 | {
710 | "cell_type": "markdown",
711 | "metadata": {},
712 | "source": [
713 | "sklearn中提供了进行PCA的API"
714 | ]
715 | },
716 | {
717 | "cell_type": "markdown",
718 | "metadata": {},
719 | "source": [
720 | "### 特征值计算"
721 | ]
722 | },
723 | {
724 | "cell_type": "code",
725 | "execution_count": 35,
726 | "metadata": {},
727 | "outputs": [],
728 | "source": [
729 | "# 实例化pca,保留所有特征\n",
730 | "pca = PCA()"
731 | ]
732 | },
733 | {
734 | "cell_type": "code",
735 | "execution_count": 36,
736 | "metadata": {},
737 | "outputs": [
738 | {
739 | "data": {
740 | "text/plain": [
741 | "array([0.36951469, 0.18434927, 0.11815159, 0.07334252, 0.06422108,\n",
742 | " 0.05051724, 0.03954654, 0.02643918, 0.02389319, 0.01629614,\n",
743 | " 0.01380021, 0.01172226, 0.00820609])"
744 | ]
745 | },
746 | "execution_count": 36,
747 | "metadata": {},
748 | "output_type": "execute_result"
749 | }
750 | ],
751 | "source": [
752 | "# 特征提取\n",
753 | "X_train_pca = pca.fit_transform(X_train_std)\n",
754 | "# 特征值结果\n",
755 | "pca.explained_variance_ratio_"
756 | ]
757 | },
758 | {
759 | "cell_type": "code",
760 | "execution_count": 39,
761 | "metadata": {},
762 | "outputs": [
763 | {
764 | "data": {
765 | "text/plain": [
766 | ""
767 | ]
768 | },
769 | "execution_count": 39,
770 | "metadata": {},
771 | "output_type": "execute_result"
772 | },
773 | {
774 | "data": {
775 | "image/png": "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\n",
776 | "text/plain": [
777 | ""
778 | ]
779 | },
780 | "metadata": {
781 | "needs_background": "light"
782 | },
783 | "output_type": "display_data"
784 | }
785 | ],
786 | "source": [
787 | "# 特征值绘制\n",
788 | "# 绘制图像\n",
789 | "plt.figure()\n",
790 | "plt.bar(range(1, 14), pca.explained_variance_ratio_, alpha=0.5, align='center',\n",
791 | " label='特征值分布')\n",
792 | "plt.step(range(1, 14), np.cumsum(pca.explained_variance_ratio_), where='mid',\n",
793 | " label='累计特征值')\n",
794 | "plt.ylabel('特征值比例')\n",
795 | "plt.xlabel('特征index')\n",
796 | "plt.legend(loc='best')"
797 | ]
798 | },
799 | {
800 | "cell_type": "markdown",
801 | "metadata": {},
802 | "source": [
803 | "### 特征降维"
804 | ]
805 | },
806 | {
807 | "cell_type": "code",
808 | "execution_count": 40,
809 | "metadata": {},
810 | "outputs": [],
811 | "source": [
812 | "# 压缩到二维特征\n",
813 | "pca = PCA(n_components=2)"
814 | ]
815 | },
816 | {
817 | "cell_type": "code",
818 | "execution_count": 41,
819 | "metadata": {},
820 | "outputs": [],
821 | "source": [
822 | "# 对训练数据进行处理\n",
823 | "X_train_pca = pca.fit_transform(X_train_std)"
824 | ]
825 | },
826 | {
827 | "cell_type": "code",
828 | "execution_count": 42,
829 | "metadata": {},
830 | "outputs": [
831 | {
832 | "name": "stdout",
833 | "output_type": "stream",
834 | "text": [
835 | "[0.36951469 0.18434927]\n"
836 | ]
837 | }
838 | ],
839 | "source": [
840 | "# 特征值结果(只保留两个特征)\n",
841 | "print(pca.explained_variance_ratio_)"
842 | ]
843 | },
844 | {
845 | "cell_type": "code",
846 | "execution_count": 43,
847 | "metadata": {},
848 | "outputs": [],
849 | "source": [
850 | "# 对测试集数据进行处理\n",
851 | "X_test_pca = pca.transform(X_test_std)"
852 | ]
853 | },
854 | {
855 | "cell_type": "code",
856 | "execution_count": 44,
857 | "metadata": {},
858 | "outputs": [
859 | {
860 | "data": {
861 | "image/png": "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\n",
862 | "text/plain": [
863 | ""
864 | ]
865 | },
866 | "metadata": {
867 | "needs_background": "light"
868 | },
869 | "output_type": "display_data"
870 | }
871 | ],
872 | "source": [
873 | "# 特征降维后结果展示\n",
874 | "colors = ['r', 'b', 'g']\n",
875 | "markers = ['s', 'x', 'o']\n",
876 | "\n",
877 | "for l, c, m in zip(np.unique(y_train), colors, markers):\n",
878 | " # 按照样本的真实值进行展示\n",
879 | " plt.scatter(X_train_pca[y_train == l, 0], \n",
880 | " X_train_pca[y_train == l, 1], \n",
881 | " c=c, label=l, marker=m)\n",
882 | "\n",
883 | "plt.xlabel('PC 1')\n",
884 | "plt.ylabel('PC 2')\n",
885 | "plt.legend(loc='lower left')\n",
886 | "plt.tight_layout()\n",
887 | "plt.show()"
888 | ]
889 | },
890 | {
891 | "cell_type": "markdown",
892 | "metadata": {},
893 | "source": [
894 | "## 利用逻辑回归进行分类"
895 | ]
896 | },
897 | {
898 | "cell_type": "markdown",
899 | "metadata": {},
900 | "source": [
901 | "### 绘制函数"
902 | ]
903 | },
904 | {
905 | "cell_type": "code",
906 | "execution_count": 48,
907 | "metadata": {},
908 | "outputs": [],
909 | "source": [
910 | "# 绘制样本及其目标值\n",
911 | "def plot_decision_regions(X, y, classifier, resolution=0.02):\n",
912 | " \"\"\"\n",
913 | " X:样本特征值\n",
914 | " y:目标值\n",
915 | " classifier: 分类器\n",
916 | " \"\"\"\n",
917 | " # 设置图像的标记及颜色\n",
918 | " markers = ('s', 'x', 'o', '^', 'v')\n",
919 | " colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')\n",
920 | " cmap = ListedColormap(colors[:len(np.unique(y))])\n",
921 | "\n",
922 | " # 利用样本点创建meshgrid\n",
923 | " x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n",
924 | " x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n",
925 | " xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),\n",
926 | " np.arange(x2_min, x2_max, resolution))\n",
927 | " # 预测结果\n",
928 | " Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)\n",
929 | " Z = Z.reshape(xx1.shape)\n",
930 | " # 绘制预测结果的等高线\n",
931 | " plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)\n",
932 | " plt.xlim(xx1.min(), xx1.max())\n",
933 | " plt.ylim(xx2.min(), xx2.max())\n",
934 | "\n",
935 | " # 绘制样本点,并根据真实值进行着色\n",
936 | " for idx, cl in enumerate(np.unique(y)):\n",
937 | " # 绘制散点图\n",
938 | " plt.scatter(x=X[y == cl, 0], \n",
939 | " y=X[y == cl, 1],\n",
940 | " alpha=0.6, \n",
941 | " c=cmap(idx),\n",
942 | " edgecolor='black',\n",
943 | " marker=markers[idx], \n",
944 | " label=cl)"
945 | ]
946 | },
947 | {
948 | "cell_type": "markdown",
949 | "metadata": {},
950 | "source": [
951 | "### PCA特征降维"
952 | ]
953 | },
954 | {
955 | "cell_type": "code",
956 | "execution_count": 45,
957 | "metadata": {},
958 | "outputs": [],
959 | "source": [
960 | "# 利用PCA进行特征降维(提取)\n",
961 | "# 保留两维特征\n",
962 | "pca = PCA(n_components=2)\n",
963 | "# 训练集数据处理\n",
964 | "X_train_pca = pca.fit_transform(X_train_std)\n",
965 | "# 测试集数据处理\n",
966 | "X_test_pca = pca.transform(X_test_std)"
967 | ]
968 | },
969 | {
970 | "cell_type": "markdown",
971 | "metadata": {},
972 | "source": [
973 | "### LR分类器"
974 | ]
975 | },
976 | {
977 | "cell_type": "code",
978 | "execution_count": 46,
979 | "metadata": {},
980 | "outputs": [
981 | {
982 | "name": "stderr",
983 | "output_type": "stream",
984 | "text": [
985 | "/Users/yaoxiaoying/.py3virtualEnv/ai/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
986 | " FutureWarning)\n",
987 | "/Users/yaoxiaoying/.py3virtualEnv/ai/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
988 | " \"this warning.\", FutureWarning)\n"
989 | ]
990 | }
991 | ],
992 | "source": [
993 | "# 实例化\n",
994 | "lr = LogisticRegression()\n",
995 | "# 模型训练\n",
996 | "lr = lr.fit(X_train_pca, y_train)"
997 | ]
998 | },
999 | {
1000 | "cell_type": "markdown",
1001 | "metadata": {},
1002 | "source": [
1003 | "### 训练数据结果"
1004 | ]
1005 | },
1006 | {
1007 | "cell_type": "code",
1008 | "execution_count": 49,
1009 | "metadata": {},
1010 | "outputs": [
1011 | {
1012 | "name": "stderr",
1013 | "output_type": "stream",
1014 | "text": [
1015 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n",
1016 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n",
1017 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n"
1018 | ]
1019 | },
1020 | {
1021 | "data": {
1022 | "image/png": "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\n",
1023 | "text/plain": [
1024 | ""
1025 | ]
1026 | },
1027 | "metadata": {
1028 | "needs_background": "light"
1029 | },
1030 | "output_type": "display_data"
1031 | }
1032 | ],
1033 | "source": [
1034 | "plot_decision_regions(X_train_pca, y_train, classifier=lr)\n",
1035 | "plt.xlabel('PC 1')\n",
1036 | "plt.ylabel('PC 2')\n",
1037 | "plt.legend(loc='lower left')\n",
1038 | "plt.tight_layout()\n",
1039 | "plt.show()"
1040 | ]
1041 | },
1042 | {
1043 | "cell_type": "markdown",
1044 | "metadata": {},
1045 | "source": [
1046 | "### 测试数据结果"
1047 | ]
1048 | },
1049 | {
1050 | "cell_type": "code",
1051 | "execution_count": 50,
1052 | "metadata": {},
1053 | "outputs": [
1054 | {
1055 | "name": "stderr",
1056 | "output_type": "stream",
1057 | "text": [
1058 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n",
1059 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n",
1060 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n"
1061 | ]
1062 | },
1063 | {
1064 | "data": {
1065 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dfZRV1Z3m8e8PqhAqQCFIWYBQykAAGcAG0q1i6IBGSaL4kkkbY2xpXavMMunYJtPpZcy8dTIzK9OTcbGmNWN1a8jyfdnasQwREiGxlMYXIEEGQTFMEwGLIiSUmKKkCvf8cepW3Vt1b73d836ez1ou6p6qc8/mrvI87L1/ex9zziEiIhI3I6JugIiISDEKKBERiSUFlIiIxJICSkREYkkBJSIisVQRdQN6O2vsWHfupElRN0MkdIfNGDtxFJVWGXVTREL1xo43fuucm9z7eOwC6txJk9h2991RN0MkdP+hsoJlfzaVaRXTom6KSKgWjl54oNhxDfGJiEgsKaBERCSWFFAiMbLtlX+NugkisaGAEomJb3d0Rt0EkVhRQImISCwpoEREJJYUUCIiEksKKBERiSUFlIiIxJICSkREYkkBJSIisRRKQJlZhZk9aWZbzOzBMK4pIiLJFlYP6hpgp3NuGTDFzC4I6boiiXLsqWqe2bIl6maIxEJYAbUB+F9mVgFMAN4L6boiiXLPohNRN0EkNkIJKOfc+865NmALcMQ5tz//+2ZWb2bbzGzb0fffD6NJIiISc2HNQU0yszOAi4EzzWxF/vedcw3OuaXOuaWTx44No0kiIhJzYQ3xfR34nHPuNNAGjAnpuiIiklBhBdS9wC1mthU4BmwM6boiIpJQoTzy3Tl3CFgZxrVERCQdtFBXRERiSQElIiKxpIASiaFntm+PugkikVNAicTMt+76QdRNEIkFBZSIiMRSKFV8aXDnunW0tbb2OV5VXc09a9aE3yARkZRTQA1SW2sr90+a1Of4bceORdAaEfHbrtd2sXnDZlqaW6iprWHlqpUs+NiCqJuVaQooEcm8Xa/tovGZRi664SJqZ9bSvL+ZxscaARRSEdIclIhk3uYNm7nohouYOnsqI0aOYOrsqVx0w0Vs3rA56qZlmnpQIpJ5Lc0t1M6s7X69b9s+tm3cxu4XdgNouC8iCigRybya2hqa9zczdfZU9m3bx9b1W1nw6QWc/8nzmXzmZA33RUQBNUhV1dVFCyKqqqsjaI2kXns7hzoPMa1iWtQtyYSVq1bS+Jg3B7Vt4zYWfNoLounnTmdizURvuO/pzQqokCmgBkml5BKaW29l759NZ/zW40yboYAKQy54Nj+9md0v7Ob8T57fHU4AtTNr2dS8KcomZpICSiSGlo/7Fe2cF3UzMmXBxxZ0B9XkMyd3hxNA8/5mamprompaZqmKT0Qkz8pVK9n62FYO7zvMh6c/5PC+w2x9bCsrV+mJQWFTD0pEJE/+cN+m5k3U1Naw+urVmn+KgAJKRKSX/OE+iY4CSkQyS9sbxZsCSkQySdsbxZ+KJEQkk7S9UfwpoERi6r0TUbcg3XpvbwTeeqeW5paIWiS9hRJQ5vmhmb1sZo1mpqFFkX7UL9sNx4+z+4PdUTcltXLbG+XTeqd4CasHtQyocM5dCIwHLg/puiLJtHw5x57SNlpB0nqn+AurJ3MEWNv19amQrikiUpLWO8VfKAHlnNsHYGbXAqOAjfnfN7N6oB5gxsSJfc4XEQmC1jvFW2hzQWa2GrgDuMo5dzr/e865BqABYGldnQurTVLanevW0dba2ud4VXW1Ns4VkVCEElBmVgv8NbDKOfeHMK4p5WlrbeX+SZP6HC/2yBERkSCEVSRxMzAF2GhmL5nZLSFdV0REEiqsOajvAt8N41oiIpIOWqgrIiKxpIASibG3tx2PugkikdGODlJUVXV10YKIqmotHg3LPYtO8J2oGyESIQWUFKVScpFg6BEfg6eAEhEJiR7xMTQKqAzSIlyRcPTuLR1rOcYnvvQJps6eCtDziI+nNyugilBAZVCaF+EqfCUuivWW7v+r+7l8bOFe2bUza9nUvCmiVsabAkpSJc3hK8mS/0BE8HpLdf+2jl0v72LFtSu6f06P+ChNZeYiIgEo9kDESz57CS8/8bIe8TFI6kGJiAQg90DEXA8KYOyZY5l+9nR2Pb1Lj/gYBAWUSMw9s307Vy9ZEnUzZIhWrlpJ42OFc1BbH9vK9bdcr0AaJAVUBmkRbnJ86+0RfGdWe9TNkGHQAxHLp4AKWRyqzNJczabwlTjRAxHLo4AKmarMgpXm8M067cCQPQooEYk97cCQTSozF5HYy19TNGLkiJ4dGDZsjrppEiD1oEQk9oqtKcriDgxZG+ZUQEksCjdE+lNsTVHWdmAY6jBnGsJMARWyOFaZqXBD4q7UmqLVV68e1vsl8eZdbOukUhvNpmXOTgEVMvVIRIbOzzVFSb15D2WYcyhhFmcKKJGY++DAKJ4Z+TJXX3hh1E2JlF9ripJ68x7KMGda5uxCq+Izs0ozezas64mkxbc3qVLNT6Vu3i3NLRG1aHBWrlrJ1se2Dmqj2VyY5UvinF0oPSgzGwO8Anw0jOtJcFRQIUmX1IKLoQxz+j1nF5VQAso5dxJYaGZvh3E9GZqhFG6ooEKSLsk378EOc6ZlH8BYzEGZWT1QDzBj4sSIW5M96vlIlqTl5l1K7wrFz6/5fGL/brEIKOdcA9AAsLSuzkXcHBFJubRu4prUCsVSYhFQkix3vvkmbadOFRzb3dHBnevWqTcmEqGkViiWooCSIWs7dYr7R48uONYEPFKkeEJEwpOW8vKcUAPKOTcrzOuJ/6qqq3ntwAGaeh2vGDUqkvaISI+kViiWoh5UygRdBn7PmjX86Te+0ed456lT7D10qOz3lxJOn+aZ3bu5ev78qFsiMZbkCsViFFApE0YZ+OnOTpaPG9f3+IkTvl1D8ixfzrfueoDvfP/OqFsiIShnn8C0VSgqoCT2tDhYssKPKrw0VSgqoGTIOioquK29vejxIGhxsGRF2qrwyqWASpE7161j94ED3Hb4cMHxqlGj4KyzfLvOBdOmKTBEApC2KrxyKaBSpK21lf9WWcnyXiXgxXo7IhI/aavCK5cCKmUqRo2iqVcg7e7o4GM+PhAxjg9dFEmDtFXhlUsBlTIXz5nT59j8Y8d8LSZQYYJIMNJWhVcuBZTEnnpskiVpqsIrlwJKYk89ti7Hj0fdApFQKaBSRD2NFLv1Vo49NY6fT9/NihnaTcJv+Ytj7UNjRMUITn94esgLZcVfCqgUUU8j3Y4+MYHz/kob8votf3Hs+79/nxf+6QXOu/A8LrjoAk69fyrRj6tIuhFRN0BEJEr5i2N3bNrBx2/5OOd/4nzePfxuz0LZDZujbmYmqQclIqnX3/52+Ytjf9/8e2pm1mAjjPaT3nKNLC+UjZoCSkRSbaD97fIXx55ZeyYt+1sYXzOe0WO8Be9DWShbzkav0peG+EQk1fKH8EaMHNFn2G7lqpVsfWwrh/cdZvGli3nxwRd54xdvMGXqFA7vO8zWx7ayctXKAa+TC8IF1y3gxv95IwuuW0DjM43sem1X0H/F1FIPKkOcA7PSryX+3tMTTYZsoP3t8hfHtjS3MObDMbRsaeG5F58b0kJZbfTqPwVURjy7cwYnOyr43JL9mHnh9OT2mYyp7OSqRb+JunlSTJP33OKGLV5Z+fJxx2hpn8Izu3d3/8jSORMAmFYxLfz2JcRg9rfzY3GsNnr1nwIqA5yDkx0VbNrr3cQ+t2Q/T26fyaa907h07iH1pGKm4b/n1rLNh5oaWDYbli8HoOb/9vzcO3Ub2HIUzph8nG14i3hnzYL5Z2idVL6w9rfTRq/+U0BlgJkXSgCb9k7rDqpL5x7q7lFJNHrCKE9NDdx664DnTj+wyvvigPdHUxPwtcd5m54e1viuBx9neXFvWPvbaaNX/5lzLuo2FFhaV+e23X131M1IJefgS498vPv1/7nxRYVTmB54AICGlmsKj991VyCX6xoh5LybNnDG5J5tkmbN6vkZ9bb8pSq+4Vk4euF259zS3scDDygzGw38EzAdeB34c9fPRRVQwcjNOeV6T6AeVOCammDfvsJAWrbM+7NryC5sezp7KsomXdjT05o1CyaMnKC5LIlEqYAKY4jvi8BB59yVZvZj4JPAT0O4rnTJD6dcKOWHlULKR01N3UUN3hzSCrhr4OG6sMyryPvX/Dbv66Ym+OCmDQCcMXl397DgR6cqsCRaYQTUSuCprq83AytQQIXKDMZUdhb0mHJzUmMqOxVO5egzbDff6yVF1EMajuXLgV7zWXs6d/Hehbu7iy+gZ2hQw4ISljACahKQ2+HyPaDPE/XMrB6oB5gxcWIITcqeqxb9pqBaLxdSaQynO9eto62176aqVdXV5W+oW9BDAmrqYfZsuDU5gTQY8yoWdPewwAusYy97w4L5RRi5MndQqbv4L4yA+i2Qe95DddfrAs65BqABvDmoENqUSb3DKI3hBNDW2sr9kyb1OV7sUSSDUVhpN3/QVXZp0j00mBdauTJ3KCx1XzpHQ4PijzACahNwOd4w30rgnhCuKQHp3Tv51aFDVHZ2MrKigrnTem5KvvRWIlC07BsCq7RLsu4ydygYGtxGz9CgytylHGEE1CPAdWb2OrATL7AkoXr3Tm47fJj7x42jqb2d5fnHh9lbCVWxKjtQGJUhf2gwv8z9mRO7C35O81kyGIEHlHPuA+DKoK8jMigFoTQfltXDbBJV1JAU3R/pgVXdPSwoPp+lMncpRjtJSLq9+y57ms8E4J3ODhrGrgDiVfqdNb3ns0qVuYOGBrNOASXp8sADVB05wqf3d3QdMDgTOHMiVJ8PaxRMcdO7zL3U0KCGBbNHASXJ1rvsm2uYt2oZ80DDdglVbGiwVJn7+HHegmJQmXsaKaBkSKqqqwsKIH7lHJecOOFV8eUdr6quLna6L1T2nT3FytzBK3U/ul9l7mlVMqDMbAReeTjAxtz+eWa2xjm3LoS2SQyFXjr+wAN9q+xAlXYC9N3RvVSZO2g+K4n660E9jbew9hTwDTO70jnXBtwCrAuhbZJFfUq/r1EYyaAVK3MHmPu1xwse9Kj5rGToL6DOds5dBGBm1wI/NrPPhNMsyYw+gdRV+p2yrYMkfAVTkNs+3/3lQNs2aXgwPvoLqDfN7CFgrXPun83sNLARqO3nHJEBFcwh1ajsW8JVbD5rT+cuthw9BBSWumtYMFolA8o5t8bMloE3mOucazSzV4Cbw2qcpECxh/SpqEFiZl7FAjjQFVhdpe6lytxBQ4Nh0RN1xV9dA//5pd8/siZoP+atRcpXXcs1a9aVfKsfrVsDrc19vzHAeSJ+K/WgR5W5+yPKBxZKyhUt+66hp5e09gW+d84f9Tnv68cO9DlWoLWZ702qG/p5Ij4r9qBHKF7mDnD1fPWw/KCAkqHpszC2yzAq7d45tIsfrV3V9xvqIUlC9C5zBy+08isGNZ81fAoo6V/RKjt/nhg7qvMD9ZAkdabn7YCRK3UvVeauDXL7p4CSvgp6SdrxW4Ym/8nNxV4HfX6cdP8vU6TMHbz5LO2AUVp/O0l8BO8x7G8559ab2b8H2oAfOOdOhtVACV6fh/TVrIBlsxVIMmQ7d0JHByxZ4oWKc7B9O1RWwqJFwZ+fBMXms3rK3A9xxuTjGhbs0l8P6hG8dU9vdL1+AVgBPA5cHXC7JEjFtg8KcreG6triw3YVZwzvvGotxYsj57xw2bvXe71kiRcue/fC3LkD94Q+/LDw/MWLYceOwZ+fZPll7k0Pecf0oMf+A6rWOff93Avn3GvAa11roSQpipR9wzW+zSMNRqmCh6IFEoM4T+LJzAsl8EIlFzRz5/b0iErJ9ZwWL/Ze79kDL74II0Z4v6oDnZ8mw3nQI6SzzL2/gPqZmW0GfgL8DhgLXAG8HEbDpAwFPaQiZd9xoR5S6uRCKhdOMHC49O55LV7shdPx4zBhgvc6K+HUn/4e9AjeDhg5aSlz73ehrpldhBdKZwPvAVucc41BNkgLdYfIx7JvkXLl5ozyA2owPaj8844e7Qmns86CefOy1YMq1zt1Gzhjcs+arCTMZw15oa6Z1QJX4RVGfMM5dyLA9slQFGwf5F/Zt0g58kMmF0r5YdVfyJj17TndcUfPHNRA50uPwZS5jx8HNWfHv8x9oCKJHwATgPuAm0JpkRRVuMFqPcyerR2/JVbMvGq7/B5Tbk6qsnLgHtSOHd6c04QJMHmy9zo3JzXQ+VJcsTJ38Oaz/h/xL3PvL6BGO+ceBjCzfxdSe4RiZd812mBVEmHRosJqu1xIDXZ4b9mywuo98F6PGBF827Ok93xWrsw9fx4rDkOD/QXUJDP7AmBATdfXADjnHh3sBcysEnjaOXfV8JuZcsV2/NYckiRU7zAaqOczUM9L4RS87jL3Qe6AEVaZe8kiCTP7TyXOcc65vx3Um5uNAV4BPuqcGz2Yc1JfJFG07Bvvn46guSTJrDTtIJFGuR3d83dzB38e9DjkIgnn3H8Z9tV63uMksNDM3u7v58ysHm/XCmZMnNjfjyZTUsq+RSI01J6XhGswD3rM8avM3dfnQZnZfcDCvENNzrlvmtnbzrlZpc7Ll4oeVLHSbw3ZiUgG9C5zh56qwVJDg6E8D8o5d7uf75cYfeaQVPotItk0vdcOGPnzWbkdMAZb5q7dzIepaNm3dvwWESlQakf33mXuxSigBqFP2Teo7FtEZJj6zmfdUPTnQgmowc4/xYbKvkVCoco96Y96UP3t9q0hO5HAZOHZT1KebAZU7yfGquxbJFTlPjtKsiEzAVU4j6QqO5EolfPsKMmOdAZUUxPs21c4h6SihrJoriBcWfi8h/PsKMmW1ARU3x5SveaQfKK5gnBl5fPO/b3ybd+ukJIeiQ2oojt+q4fkO80VhCsrn3c5z46S7EhGQBUr+waVfodAcwXhysrnXc6zoyQ74hlQfeaQVPYdJc0VhCsrn/dwnh0l2RK7gDrafJqGfSuAFXCXhuziQHMF4crS560dzKU/sQsoams1lxQjmisIlz5vkR7xCyiJFc0VhCuIzzsLJeuSTgooGZDmCsLl5+edlZJ1SacRUTdAkkFzBeHy4/POL1nfvr1w+LCjw3stEmfqQYmkVNpL1jV0mX7qQYkEqHcvJexeS35I5aQhnHbu7OkVQk/vcOfOaNsl/lJAiQQkDjfRUiXrSR7e09BldmiITyQAcdiyKK0l62kfupQeCiiRAMThJhrXJQJ+zB1lZbeNrNMQn5Ql6jmWOIvD/M+iRYXXzLUpqhJzv4Y90zh0KX0poGTY4jDHEmdxuYnGZYmAX3NHvYcub7zR+zP/fSUdNMQnwxKHOZY482v+J02l1H4Ne8Z16FL8F2hAmZkB64A5QAtwnXOuM8hrSjjiMMcSZ37cRNO4C4Rfc0fa3SQbgh7iWwZUOOcuBMYDlwd8PQlRHOZY4qyc+Z+0llL7OewZl6FLCU7QQ3xHgLVdX58K+FoSsiw9FmK4hnsTDbKHWmrYMOjhxLSWvUtwfA0oM7sPWJh3qMk5900zuxYYBWwscV49UA8wceIMP5skAdHNJnhBlFKXGjY8dAimTQt2OFFzRzJUvgaUc+723sfMbDVwB3CVc+50ifMagAaAurqlCR28yJa03mziVJTgdw+1VGHLnj0walQ4BS+aO5KhCLpIohb4a2CVc+4PQV5Lwpe2m02cihKC6KGWGjacNw8WL4YdO8IpeNHckQxW0EUSNwNTgI1m9pKZ3RLw9SRkabnZxK0ooVQPde7c8nqopQpbRoxQwYvET6A9KOfcd4HvBnkNkcHqb/gujmXzQfRQSw0b5npQvY8rpCRKWqgrmTCY4bs47u/mZw+11LDhnj3w6197n89QhxPjNGcn6aOtjiT18ofvtm0rvFGfOtV3q6Z8ado6x8yr1qus9HpMZt6fo0ZBa+vQhxO11ZUETQElqZe74Y4ZAy+9BI884oXTnDne919/PRv7uznnlZKfOuUN5znn/XnqlBdUudCCgRcVx23OTtJJQ3ySGTNmeGEEMHmy9+ebb3pBBOksm8/XXxVfsWG8/v7OcZyzk/RRQEmmTJgAx497/x09Cpdc0nNDTVvZfDF+zrPFcc5O0kVDfJJ6ueGnN9/0AmnWrJ6g6i0tZfOl+DnPlvY5O4meelCSerk1Rbk5JzM46yzv69/8BpYuja5tYfJz8a+2upIwqAclmbCwa4fI3JzTF7/o9aZOnszOv/r9XPwb1EJikXzqQUkmmHnl1Pk31KVLe260Wbmh+jnPloU5O4mWAkoyQzdUj5/zbGmfs5NoaYhPMkU3VJHkUECJiEgsKaBERCSWFFAiIhJLCigREYklBZSIiMSSAkpERGJJASUiIrGkgBIRkVhSQImISCwpoEREJJYCDSgzqzCzJ81si5k9GOS1REQkXYLuQV0D7HTOLQOmmNkFAV9PRERSIujdzDcAPzGzCmAC8F7A1xMRkZTwNaDM7D5gYd6hJufcN83sFeBd59z+EufVA/UAEyfO8LNJIiKSUL4GlHPu9vzXZjbJzM4ALgY2m9kK59zPi5zXADQA1NUtzcCzTUVEZCBBD/F9HXjDOfewmbUBY4bzJhUVHcyceZCqqnZ/W+eTtrbR7N9/Dp2dlVE3RUQkNYIOqHuBh8zsy8CvgY3DeZOZMw8yffo4xo07F4vZE+acc5w4cQw4yFtvnRd1c0REUiPQgHLOHQJWlvs+VVXtsQwnADNj3LhJVFUdjbopIiKpkpiFunEMp5w4t01EJKkSE1AiIpItQc9Bhe4//uUa2lua+xwfXVPL3/7vdWW9d0dHB3/xF9fx8MPPlvU+IiIysNQFVHtLM/edU9fn+O0HD5T1vidPnmTVqj9h//63ynofEREZHA3xDdKYMWN44YXXmTLlnKibIiKSCQooERGJJQWUiIjEkgJKRERiKXVFEqNraosWRIyuqY2gNSIiMlypC6hyS8kH8uqrbwf6/iIi4tEQn4iIxJICSmSInOv/tYj4QwElMgQ7d8L27T2h5Jz3eufOaNslkkYKKJFBcg46OmDv3p6Q2r7de93RoZ6UiN9SVyQB3o0if4Px3q9FhsMMlizxvt671/sPYO5c77h+x0T8lboe1MaN0NhYOATT2OgdL4dzjq985WY+9akLuemm1XR2dpbfWEmc/JDKUTiJBCNVAeUctLdDU1NPSDU2eq/b28sbgnnllS10dnby3HMvc+LEe/ziFz/1r+GSGLlhvXz5c1Ii4p9UDfGZwerV3tdNTd5/AMuXe8fL+VduTc3Z1NffAUBl5agyWypJlD/nlBvWy70G9aRE/JaqgIKekMqFE5QfTgAzZ84GYP36f6aj4xQrVlxR3htK4phBZWXhnFNuuK+yUuEk4rfUBVRuWC9fY6M/IbVhQyP/8A9refjhZxk5cmR5byaJtGhRYdFNLqQUTiL+S1VA5c855Yb1cq+hvJA6cqSZe+/9Ox5/fAMf+chH/Gu0JE7v3yGFk0gwQiuSMLM7zez5YK8Bo0cXzjmtXu29Hj26vBvJE0/8kCNH3uX666/gyisv4dFHH/Sv4SIi0kcoPSgzqwPWAEeDvtYVV/QdgvFjeO+rX/0bvvrVvym/gSIiMihh9aDWAneFdC0NwYiIpIDvPSgzuw9YmHdoKvAQ8EY/59QD9QATJ87wu0kiIpJAvgeUc+72/Ndm9ihwKXAFMMfMvuKc+/te5zQADQB1dUu15FFERIKfg3LOfQHAzM4F/rF3OImIiBSTqq2OREQkPUJbB+Wc+1fgsjCuteOXr7L++ac43PIOU2um85nLPsviP/rjst6zs7OT2267gebmw8yaNYe1a1VmLiISpNT1oHb88lUeea6B+dfN48//xxrmXzePR55rYMcvXy3rfZ977kfMn7+I9eu3cOTIu+za9SufWiwiIsWkLqDWP/8Uy66/hHNmT2fkyJGcM3s6y66/hPXPP1XW+65YsYovfelrdHZ20tp6nHHjxvvUYhERKSZ1AXW45R2mzJxacGzKzKkcbnmnrPcdO3YsVVVVXHnlMiZPPptzz51Z1vuJiEj/UhdQU2um8+7+wwXH3t1/mKk108t639/97hgffPAB69f/C62tv+ell35e1vuJiEj/UhdQn7nss2x54iUO7nuH06dPc3DfO2x54iU+c9lny3rf73//ezQ2PsnIkSMZM6aK9vaTPrVYRESKSdVu5kB3td76p5/iZy0/ZWrNdG78VH3ZVXy33PJlvvzlm3jwwXs599x/o+dBiYgELHUBBV5IlRtIvU2ZMo2nn97s63uKiEhpqRviExGRdEhMQDkX3y364tw2EZGkSkRAtbWN5sSJY7EMAuccJ04co61tdNRNERFJlUTMQe3ffw5wkKqqwJ93OCxtbaO72igiIn5JREB1dlby1lvnRd0MEREJUSKG+EREJHsUUCIiEksKKBERiSWLW2WcmR0FDoR82bOA34Z8zTTS5+gPfY7+0OfojzA+xzrn3OTeB2MXUFEws23OuaVRtyPp9Dn6Q5+jP/Q5+iPKz1FDfCIiEksKKBERiSUFlKch6gakhD5Hf+hz9Ic+R39E9jlqDkpERGJJPSgREYklBZSIiMSSAqqLmd1pZs9H3Y6kMs8PzexlM2s0s0Ts8xgnZjbazH5sZjvN7CEzs6jblET6XfRXlPdGBRRgZnXAmqjbkXDLgArn3IXAeODyiNuTRF8EDjrnFgFnAp+MuD1Jpd9Fn0R9b1RAedYCd0XdiIQ7gvc5ApyKsiEJthL4WdfXm4EVEbYlyfS76J9I742Z6/qa2X3AwrxDU4GHgDeiaVEyFfkcm5xz3zSza4FRwMZoWpZok4DWrq/fA+ZE2JbEcs7tA9DvYnnM7AvATiK8N2YuoJxzt+e/NrNHgUuBK4A5ZvYV59zfR9K4BOn9OQKY2WrgDuAq59zp8FuVeL8Fqru+rkb7yA2bfhd9cSUwgwjvjVoH1cXMzgX+0Tl3WcRNSSQzqwWeBFY55/4QdXuSyMxuAf7EOXebma0H7nHOqXBniPS76K8o742agxK/3AxMATaa2UtdN1sZmkeAaWb2OvA7YFPE7Ukq/S6mhHpQIiISSxg0amEAAAEYSURBVOpBiYhILCmgREQklhRQIiISSwooERGJJQWUSMDM7D+b2Ztm9i9m9nMzm9p1/Ntm9krXfnHj+jm/0syeDa/FIvGggBIJx7edcxcDDwJ/aWYXAx8HLgQ2APXFTjKzMcB2tC+fZJACSiRcE4CTeKvzf+K8dR4bgLeK/bBz7qRzbiFwMLwmisSDAkokHHebWRNej2ktcDbeYlycc/udcxrCE+klc3vxiUTkvzrnHs69MLP3gLFdX/8x8KfOub+LqnEicaQelEg0tuAN84H3WI2TEbZFJJbUgxKJRiNwmZm9ivf8os9H3B6R2NFefCIiEksa4hMRkVhSQImISCwpoEREJJYUUCIiEksKKBERiSUFlIiIxNL/B2Aavd8rpTkOAAAAAElFTkSuQmCC\n",
1066 | "text/plain": [
1067 | ""
1068 | ]
1069 | },
1070 | "metadata": {
1071 | "needs_background": "light"
1072 | },
1073 | "output_type": "display_data"
1074 | }
1075 | ],
1076 | "source": [
1077 | "plot_decision_regions(X_test_pca, y_test, classifier=lr)\n",
1078 | "plt.xlabel('PC 1')\n",
1079 | "plt.ylabel('PC 2')\n",
1080 | "plt.legend(loc='lower left')\n",
1081 | "plt.tight_layout()\n",
1082 | "plt.show()"
1083 | ]
1084 | },
1085 | {
1086 | "cell_type": "markdown",
1087 | "metadata": {},
1088 | "source": [
1089 | "# LDA(Linear discriminant analysis)"
1090 | ]
1091 | },
1092 | {
1093 | "cell_type": "markdown",
1094 | "metadata": {},
1095 | "source": [
1096 | "## LDA实现"
1097 | ]
1098 | },
1099 | {
1100 | "cell_type": "code",
1101 | "execution_count": 51,
1102 | "metadata": {},
1103 | "outputs": [],
1104 | "source": [
1105 | "# 精度设置,浮点数\n",
1106 | "np.set_printoptions(precision=4)"
1107 | ]
1108 | },
1109 | {
1110 | "cell_type": "markdown",
1111 | "metadata": {},
1112 | "source": [
1113 | "### 平均向量"
1114 | ]
1115 | },
1116 | {
1117 | "cell_type": "code",
1118 | "execution_count": 52,
1119 | "metadata": {},
1120 | "outputs": [
1121 | {
1122 | "name": "stdout",
1123 | "output_type": "stream",
1124 | "text": [
1125 | "MV 1: [ 0.9066 -0.3497 0.3201 -0.7189 0.5056 0.8807 0.9589 -0.5516 0.5416\n",
1126 | " 0.2338 0.5897 0.6563 1.2075]\n",
1127 | "\n",
1128 | "MV 2: [-0.8749 -0.2848 -0.3735 0.3157 -0.3848 -0.0433 0.0635 -0.0946 0.0703\n",
1129 | " -0.8286 0.3144 0.3608 -0.7253]\n",
1130 | "\n",
1131 | "MV 3: [ 0.1992 0.866 0.1682 0.4148 -0.0451 -1.0286 -1.2876 0.8287 -0.7795\n",
1132 | " 0.9649 -1.209 -1.3622 -0.4013]\n",
1133 | "\n"
1134 | ]
1135 | }
1136 | ],
1137 | "source": [
1138 | "# 计算每一类数据的平均向量\n",
1139 | "mean_vecs = []\n",
1140 | "for label in range(1, 4):\n",
1141 | " mean_vecs.append(np.mean(X_train_std[y_train == label], axis=0))\n",
1142 | " print('MV %s: %s\\n' % (label, mean_vecs[label - 1]))"
1143 | ]
1144 | },
1145 | {
1146 | "cell_type": "markdown",
1147 | "metadata": {},
1148 | "source": [
1149 | "### 类内散度矩阵Sw"
1150 | ]
1151 | },
1152 | {
1153 | "cell_type": "code",
1154 | "execution_count": 53,
1155 | "metadata": {},
1156 | "outputs": [],
1157 | "source": [
1158 | "# 特征维度\n",
1159 | "d = 13 \n",
1160 | "S_W = np.zeros((d, d))\n",
1161 | "# 获取每个类别的平均值向量\n",
1162 | "for label, mv in zip(range(1, 4), mean_vecs):\n",
1163 | " # 每一类别的散度矩阵\n",
1164 | " class_scatter = np.zeros((d, d)) \n",
1165 | " for row in X_train_std[y_train == label]:\n",
1166 | " # 列向量\n",
1167 | " row, mv = row.reshape(d, 1), mv.reshape(d, 1) \n",
1168 | " class_scatter += (row - mv).dot((row - mv).T)\n",
1169 | " # 每个类别散度矩阵之和\n",
1170 | " S_W += class_scatter "
1171 | ]
1172 | },
1173 | {
1174 | "cell_type": "markdown",
1175 | "metadata": {},
1176 | "source": [
1177 | "### 类间散度矩阵SB"
1178 | ]
1179 | },
1180 | {
1181 | "cell_type": "code",
1182 | "execution_count": 54,
1183 | "metadata": {},
1184 | "outputs": [],
1185 | "source": [
1186 | "# 全局平均值\n",
1187 | "mean_overall = np.mean(X_train_std, axis=0)\n",
1188 | "# 特征维度\n",
1189 | "d = 13 \n",
1190 | "S_B = np.zeros((d, d))\n",
1191 | "# 获取每个类别的平均值\n",
1192 | "for i, mean_vec in enumerate(mean_vecs):\n",
1193 | " n = X_train[y_train == i + 1, :].shape[0]\n",
1194 | " # 列向量\n",
1195 | " mean_vec = mean_vec.reshape(d, 1) \n",
1196 | " mean_overall = mean_overall.reshape(d, 1) \n",
1197 | " # 类间散度矩阵\n",
1198 | " S_B += n * (mean_vec - mean_overall).dot((mean_vec - mean_overall).T)"
1199 | ]
1200 | },
1201 | {
1202 | "cell_type": "markdown",
1203 | "metadata": {},
1204 | "source": [
1205 | "### 特征值计算"
1206 | ]
1207 | },
1208 | {
1209 | "cell_type": "markdown",
1210 | "metadata": {},
1211 | "source": [
1212 | "求解矩阵 $S_W^{-1}S_B$的特征值和特征向量"
1213 | ]
1214 | },
1215 | {
1216 | "cell_type": "code",
1217 | "execution_count": 55,
1218 | "metadata": {},
1219 | "outputs": [],
1220 | "source": [
1221 | "# 计算LDA的特征值\n",
1222 | "eigen_vals, eigen_vecs = np.linalg.eig(np.linalg.inv(S_W).dot(S_B))"
1223 | ]
1224 | },
1225 | {
1226 | "cell_type": "code",
1227 | "execution_count": 56,
1228 | "metadata": {},
1229 | "outputs": [
1230 | {
1231 | "data": {
1232 | "text/plain": [
1233 | "array([ 0.0000e+00+0.0000e+00j, 4.2257e+00+0.0000e+00j,\n",
1234 | " 8.2625e+00+0.0000e+00j, -1.2454e-15+0.0000e+00j,\n",
1235 | " 5.3485e-16+2.0059e-16j, 5.3485e-16-2.0059e-16j,\n",
1236 | " 2.3023e-16+2.2646e-16j, 2.3023e-16-2.2646e-16j,\n",
1237 | " -3.0897e-16+2.9887e-16j, -3.0897e-16-2.9887e-16j,\n",
1238 | " -3.4712e-18+0.0000e+00j, -2.7022e-16+0.0000e+00j,\n",
1239 | " -2.0974e-16+0.0000e+00j])"
1240 | ]
1241 | },
1242 | "execution_count": 56,
1243 | "metadata": {},
1244 | "output_type": "execute_result"
1245 | }
1246 | ],
1247 | "source": [
1248 | "eigen_vals"
1249 | ]
1250 | },
1251 | {
1252 | "cell_type": "markdown",
1253 | "metadata": {},
1254 | "source": [
1255 | "### 特征值分布"
1256 | ]
1257 | },
1258 | {
1259 | "cell_type": "code",
1260 | "execution_count": 58,
1261 | "metadata": {},
1262 | "outputs": [
1263 | {
1264 | "name": "stdout",
1265 | "output_type": "stream",
1266 | "text": [
1267 | "8.262493673957486\n",
1268 | "4.225659486916685\n",
1269 | "1.2454365753641987e-15\n",
1270 | "5.71224762018794e-16\n",
1271 | "5.71224762018794e-16\n",
1272 | "4.298731032916801e-16\n",
1273 | "4.298731032916801e-16\n",
1274 | "3.2293605074486046e-16\n",
1275 | "3.2293605074486046e-16\n",
1276 | "2.702165077415812e-16\n",
1277 | "2.0974269802096344e-16\n",
1278 | "3.4711688834518034e-18\n",
1279 | "0.0\n"
1280 | ]
1281 | }
1282 | ],
1283 | "source": [
1284 | "# 创建由特征值和特征向量组成的list\n",
1285 | "eigen_pairs = [(np.abs(eigen_vals[i]), eigen_vecs[:, i])\n",
1286 | " for i in range(len(eigen_vals))]\n",
1287 | "\n",
1288 | "# 根据特征值从大到小排序(eigenvalue, eigenvector)\n",
1289 | "eigen_pairs = sorted(eigen_pairs, key=lambda k: k[0], reverse=True)\n",
1290 | "\n",
1291 | "# 特征值结果\n",
1292 | "for eigen_val in eigen_pairs:\n",
1293 | " print(eigen_val[0])"
1294 | ]
1295 | },
1296 | {
1297 | "cell_type": "code",
1298 | "execution_count": 61,
1299 | "metadata": {},
1300 | "outputs": [
1301 | {
1302 | "data": {
1303 | "image/png": "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plr7iz4rY8eO5aGHHuKNN97gyCOPpEePHuyxxx4MHz48/ZGfMGECp512GqNGjWLEiBHpYaXzzz+fa665hsGDBxe0rS5dujBjxgy++c1v8uGHHzJo0Kdje7711lts3ryZ6upqRowYQX19PYMHD2bDhg0ce+yxnHnmmQwYMABI9hQOOeQQxo0bx6233so999xDfX09l112GRMnTmzfD6gZzYaCpL2AXr66yMzK0fz583nnnXd45JFH6NmzJ/3792fjxo3MmTOH559/nptvvpk99khG62+Peyrmzp3L3nvvzUUXXcTXv/51Fi1aRPfu3RkyZAizZ88GoE+fPjQ2NnLeeedx3333sXr1ai677LJ0HRs3bqSqqoqbbrqJU045Ja1rzZo1u1xfoVraU6gElkq6KSJu66iCzMzaQ+/evRkxYgTDhg3jiCOO4A9/+AOTJ0+mX79+vP/++2kgbHfFFVdw7bXXstdezQ38nN/WrVu5+uqreeWVV5g7dy4VFRW8+eab3HHHHVxyySU79Z0zZw633347kAwFsv/+++/0+ptvvsnAgQN56623mDdvHqeeeirr1q3j0EPzjSeajZZCoRH4NnBYx5RiZtZ+JHH//fczceJEqqqq2HPPPenevTtXXXUVXbp04dhjj6V79+7U19fz+OOPM27cuKIDAZIT1V/60peYMWMGXbt2BeDHP/4xXbp8ehvY+vXrmTZtGscffzwHH3wwa9as4emnn+a73/1u2qexsZF169ZRUVHB3Llzqa6uplu3bqxcuTI9B9IRWjuncDOwrJU+Zmadzocffsi9997L3nvvzYQJE7jmmms46qij+O1vf8urr76anghev349l19+OVdffXW67ObNm9m8eXNzq041NjYyefJkevbsyW237XxAZdu2bcycOZPq6mq+973v8ZWvfIWLLroISEKja9euHHvssWn/X/3qV4wePZo33niDt99+m48++ohZs2Zx4oknsmTJEgYMGMCIESN2uvQ1C4poeSRqSWMiotMEQ3V1dSxfvrxNy/508cvtVse0cYe027rMdjerV6/msMM+3wcZtm3bhqSCz1e8++67dOnShSVLlvD2228zatQojj/+eFavXs2iRYv44IMPdrrBriX5Pn9JKyKiurVlCxk6u8VAkNSlpaEwzMw+j3Y8fFSI/fbbD4BJkybt9PywYcMYNmxYu9XV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\n",
1304 | "text/plain": [
1305 | ""
1306 | ]
1307 | },
1308 | "metadata": {
1309 | "needs_background": "light"
1310 | },
1311 | "output_type": "display_data"
1312 | }
1313 | ],
1314 | "source": [
1315 | "# 实部求和\n",
1316 | "tot = sum(eigen_vals.real)\n",
1317 | "# 计算比例\n",
1318 | "discr = [(i / tot) for i in sorted(eigen_vals.real, reverse=True)]\n",
1319 | "# 累计求和\n",
1320 | "cum_discr = np.cumsum(discr)\n",
1321 | "\n",
1322 | "plt.bar(range(1, 14), discr, alpha=0.5, align='center',\n",
1323 | " label='\"区分度\"分布')\n",
1324 | "plt.step(range(1, 14), cum_discr, where='mid',\n",
1325 | " label='累计\"区分度\"')\n",
1326 | "plt.ylabel('\"区分度\" 比例')\n",
1327 | "plt.xlabel('特征维度')\n",
1328 | "plt.ylim([-0.1, 1.1])\n",
1329 | "plt.legend(loc='best')\n",
1330 | "plt.show()"
1331 | ]
1332 | },
1333 | {
1334 | "cell_type": "markdown",
1335 | "metadata": {},
1336 | "source": [
1337 | "### 特征降维"
1338 | ]
1339 | },
1340 | {
1341 | "cell_type": "code",
1342 | "execution_count": 62,
1343 | "metadata": {},
1344 | "outputs": [],
1345 | "source": [
1346 | "# 保留两维特征\n",
1347 | "w = np.hstack((eigen_pairs[0][1][:, np.newaxis].real,\n",
1348 | " eigen_pairs[1][1][:, np.newaxis].real))"
1349 | ]
1350 | },
1351 | {
1352 | "cell_type": "code",
1353 | "execution_count": 63,
1354 | "metadata": {},
1355 | "outputs": [
1356 | {
1357 | "data": {
1358 | "text/plain": [
1359 | "array([[-0.1586, -0.4077],\n",
1360 | " [ 0.0984, -0.1821],\n",
1361 | " [-0.0156, -0.3473],\n",
1362 | " [ 0.1588, 0.3095],\n",
1363 | " [-0.0207, -0.064 ],\n",
1364 | " [ 0.1884, 0.0733],\n",
1365 | " [-0.7153, 0.3034],\n",
1366 | " [-0.0798, -0.0009],\n",
1367 | " [ 0.0074, 0.0716],\n",
1368 | " [ 0.3448, -0.2808],\n",
1369 | " [-0.0254, 0.244 ],\n",
1370 | " [-0.3192, -0.0459],\n",
1371 | " [-0.4054, -0.5806]])"
1372 | ]
1373 | },
1374 | "execution_count": 63,
1375 | "metadata": {},
1376 | "output_type": "execute_result"
1377 | }
1378 | ],
1379 | "source": [
1380 | "w"
1381 | ]
1382 | },
1383 | {
1384 | "cell_type": "code",
1385 | "execution_count": 64,
1386 | "metadata": {},
1387 | "outputs": [],
1388 | "source": [
1389 | "# 特征降维\n",
1390 | "X_train_lda = X_train_std.dot(w)"
1391 | ]
1392 | },
1393 | {
1394 | "cell_type": "code",
1395 | "execution_count": 66,
1396 | "metadata": {},
1397 | "outputs": [
1398 | {
1399 | "data": {
1400 | "text/plain": [
1401 | "array([ 0.8944, -0.3881, 1.1007, -0.812 , 1.132 , 1.0981, 0.712 ,\n",
1402 | " 0.181 , 0.0663, 0.5129, 0.7963, 0.4483, 1.9059])"
1403 | ]
1404 | },
1405 | "execution_count": 66,
1406 | "metadata": {},
1407 | "output_type": "execute_result"
1408 | }
1409 | ],
1410 | "source": [
1411 | "# 降维前\n",
1412 | "X_test_std[0]"
1413 | ]
1414 | },
1415 | {
1416 | "cell_type": "code",
1417 | "execution_count": 67,
1418 | "metadata": {},
1419 | "outputs": [
1420 | {
1421 | "data": {
1422 | "text/plain": [
1423 | "array([ 1.2617, -0.6537])"
1424 | ]
1425 | },
1426 | "execution_count": 67,
1427 | "metadata": {},
1428 | "output_type": "execute_result"
1429 | }
1430 | ],
1431 | "source": [
1432 | "# 降维后\n",
1433 | "X_train_lda[0]"
1434 | ]
1435 | },
1436 | {
1437 | "cell_type": "code",
1438 | "execution_count": 68,
1439 | "metadata": {},
1440 | "outputs": [
1441 | {
1442 | "data": {
1443 | "image/png": "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\n",
1444 | "text/plain": [
1445 | ""
1446 | ]
1447 | },
1448 | "metadata": {
1449 | "needs_background": "light"
1450 | },
1451 | "output_type": "display_data"
1452 | }
1453 | ],
1454 | "source": [
1455 | "# 结果绘制\n",
1456 | "colors = ['r', 'b', 'g']\n",
1457 | "markers = ['s', 'x', 'o']\n",
1458 | "\n",
1459 | "for l, c, m in zip(np.unique(y_train), colors, markers):\n",
1460 | " plt.scatter(X_train_lda[y_train == l, 0],\n",
1461 | " X_train_lda[y_train == l, 1] * (-1),\n",
1462 | " c=c, label=l, marker=m)\n",
1463 | "\n",
1464 | "plt.xlabel('LD 1')\n",
1465 | "plt.ylabel('LD 2')\n",
1466 | "plt.legend(loc='lower right')\n",
1467 | "plt.show()"
1468 | ]
1469 | },
1470 | {
1471 | "cell_type": "markdown",
1472 | "metadata": {},
1473 | "source": [
1474 | "## 使用sklearn实现LDA并进行LR分类"
1475 | ]
1476 | },
1477 | {
1478 | "cell_type": "code",
1479 | "execution_count": 69,
1480 | "metadata": {},
1481 | "outputs": [],
1482 | "source": [
1483 | "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA\n",
1484 | "# 实例化\n",
1485 | "lda = LDA(n_components=2)"
1486 | ]
1487 | },
1488 | {
1489 | "cell_type": "code",
1490 | "execution_count": 70,
1491 | "metadata": {},
1492 | "outputs": [],
1493 | "source": [
1494 | "# 对训练数据进行LDA处理\n",
1495 | "X_train_lda = lda.fit_transform(X_train_std, y_train)"
1496 | ]
1497 | },
1498 | {
1499 | "cell_type": "code",
1500 | "execution_count": 73,
1501 | "metadata": {},
1502 | "outputs": [
1503 | {
1504 | "data": {
1505 | "text/plain": [
1506 | "array([2.9646, 1.157 ])"
1507 | ]
1508 | },
1509 | "execution_count": 73,
1510 | "metadata": {},
1511 | "output_type": "execute_result"
1512 | }
1513 | ],
1514 | "source": [
1515 | "X_train_lda[0]"
1516 | ]
1517 | },
1518 | {
1519 | "cell_type": "code",
1520 | "execution_count": 71,
1521 | "metadata": {},
1522 | "outputs": [
1523 | {
1524 | "name": "stderr",
1525 | "output_type": "stream",
1526 | "text": [
1527 | "/Users/yaoxiaoying/.py3virtualEnv/ai/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
1528 | " FutureWarning)\n",
1529 | "/Users/yaoxiaoying/.py3virtualEnv/ai/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
1530 | " \"this warning.\", FutureWarning)\n"
1531 | ]
1532 | }
1533 | ],
1534 | "source": [
1535 | "# 实例化逻辑回归\n",
1536 | "lr = LogisticRegression()\n",
1537 | "# 训练\n",
1538 | "lr = lr.fit(X_train_lda, y_train)"
1539 | ]
1540 | },
1541 | {
1542 | "cell_type": "code",
1543 | "execution_count": 74,
1544 | "metadata": {},
1545 | "outputs": [
1546 | {
1547 | "name": "stderr",
1548 | "output_type": "stream",
1549 | "text": [
1550 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n",
1551 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n",
1552 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n"
1553 | ]
1554 | },
1555 | {
1556 | "data": {
1557 | "image/png": "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\n",
1558 | "text/plain": [
1559 | ""
1560 | ]
1561 | },
1562 | "metadata": {
1563 | "needs_background": "light"
1564 | },
1565 | "output_type": "display_data"
1566 | }
1567 | ],
1568 | "source": [
1569 | "# 训练数据结果\n",
1570 | "plot_decision_regions(X_train_lda, y_train, classifier=lr)\n",
1571 | "plt.xlabel('LD 1')\n",
1572 | "plt.ylabel('LD 2')\n",
1573 | "plt.legend(loc='lower left')\n",
1574 | "plt.tight_layout()\n",
1575 | "plt.show()"
1576 | ]
1577 | },
1578 | {
1579 | "cell_type": "code",
1580 | "execution_count": 75,
1581 | "metadata": {},
1582 | "outputs": [
1583 | {
1584 | "name": "stderr",
1585 | "output_type": "stream",
1586 | "text": [
1587 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n",
1588 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n",
1589 | "'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.\n"
1590 | ]
1591 | },
1592 | {
1593 | "data": {
1594 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAfOElEQVR4nO3dfZBV1Z3u8edH89IgL9od2hZsGxGmOyGAkU6C08gdiBNJYSBqqePb+FaFc40TR2uSKXUyNTfXKsubupXiJnFueoJlxuAbV+eGhBF8YUwHr1FpR6QkIF4ylAw2jRiRBFtoWPPH7iOnT58+dPc+Z++19/5+qiz77KbPXp5q98Na67fWMuecAADwzYi4GwAAQDEEFADASwQUAMBLBBQAwEsEFADASyPjbkChT40f76bV1sbdDCDR9nceU8+0Kp06fnzcTQFOattr295zzk0uvO5dQE2rrdXme+6JuxlAorXdd0Bdj56t5bNmxd0U4KTmVM/ZXew6Q3wAAC8RUEAKda06Le4mAKERUEBKMbyHpCOgAABeIqCAlLl3xvG4mwCUBQEFpNDy1ta4mwCERkABALxEQAFpsmpV3C0AyoaAAtKmujruFgBlQUABALxEQAEpcu99N9KDQmoQUEDKsEAXaUFAAQC8FGlAmdkdZvZclPcEsuLbo7w7nAAIJbKAMrNGSTdEdT8gi1q+OC3uJgBlE+VfuVZKukvSnRHesyLueOghHT54sN/1cZMm6Xs33BB9gwBJYxqPxN0EoKwiCSgzu1rSFknbBvj+CkkrJOmsmpoomhTK4YMH9aMip/7ecuBADK0BFCzQve9GTR05Ne6WAGUT1RDfxZK+JOkxSfPM7Lb8bzrn2pxzLc65lskcUQ0MD+XlSJlIelDOuaslycymSfqxc+4HUdwXAJBclJkDKXDvfTfG3QSg7CKtS3XO/bukC6O8J5AVy+fNi7sJQFmxcGIYxk2aVLQgYtykSTG0BgDSiYAaBkrJ4ZM7tkxQ7Wc/jrsZQNkxBwWkwIzPUsGH9CGggISrvaz/onEgDRjiK4EdI+C99nap6b9o1hh2MEf6EFAlsGMEAMSHIT4gwa5df03cTQAqhoACEqz5id1aPn9+3M0AKoKAAgB4iTkoz1GogYFce3eDmp/YHXczgIohoErwYccICjUwkMlXfqAZLafG3QygYgioEuihAEB8mIMCEooFukg7elBAUlVVsUDXI1tf3aqN6zeqq7NLdfV1WrxksWZ/fnbczUo0AgoAQtr66lat/dlanX/V+aqfXq/OXZ1a++haSSKkQiCgPBd1oQZVg8lw74zjkqribgZ6bVy/Uedfdb6mzJwiSZoyc4rOv+p8bXxqIwEVAgHluahDgarB5GCBrj+6OrtUP72+z7X66fV6vvP5mFqUDhRJAEBIdfV16tzV2eda565O1dXXxdSidCCggIS59u6GuJuAAouXLNZLj76kvTv36vix49q7c69eevQlLV6yOO6mJRpDfEACTWxgga5PcvNMG5/aqOc7n1ddfZ2WLV8W+/xT0isLCagUo+ABiM7sz8/26uGfhspCAirFhlPw4MP2Tiit+YndqjudHhRKS0NlIQGFPuhZJQMLdHEyaagspEgCSJL29rhbgIRIQ2UhAQUkyL03LaBAAoOShspChviAhFl0FsN7ODlfKwuHgoBKMQoegGzzrbJwqAioXmksyU5qu1Fc230HpFWnxd0MxCzpa5uGgoDqxR508F37oXP1hQbOgMqyNKxtGgoCyiNp7MWhfM7+7ruSxsXdjEzypdeShrVNQ0FAeYReHEoZ03hEi876fNzNCMWXB/1Q+NBryX1uv3r+V6pfVK/qrmrV1NVISt7apqEgoABEwocH/XDE3WvJ/9zePfSuDh46qPdff1/jx47XOU3nqPtgd6LWNg1FJOugLPATM/u1ma01M4IRGIJvj0r+/zL5D/oRVSNOPOjXb4y7aSUNtCNDV2dXJPfPfW7Vk6o1uWmydmzcoVNOPUU96tFrm17TM//7mUStbRqKqH7rWyWNdM7NN7MXJH1Z0r9EdO9BoSQbPhvTeETLW1vjbkYoSd16J7cjQ64HJUW7I0Puc3vz9Tf1uaWf05SmKXrjmTe0/ZfbNfO8mRrdM9rrHmgYUQXUPkkre78+UvhNM1shaYUknVVTE1GT+qIIAaisuB/0w7V4yWKtfbTv0ORLj76kZcuXRXL/3OfW/VG3xk4cq7Pnna2xE8dqTNUYXfGtK7T6r1dH0o44RBJQzrmdkmRml0gaLWlDwffbJLVJUktjo4uiTT6qZC+OCkHELe4H/XDFvSND7nOrmV2jP/zuD/r9gd/rlcdf0flLz09EwIcR2cC2mS2TdLukrzrnjkV13ySpZFBQIZhcbfcdkB76VNzNCC3uB30Yce7IkLvvmn9aoxd+/IIaP9uoBZct0CmTTklEwIcRSUCZWb2kb0pa4pz7QxT3BFJlwoS4W1AWSd96Jy65zy1Xbv7yoy8nKuCHK6oe1PWSzpC0wcwk6UHn3IMR3RtItC62N0qVMGvBshbwUc1B3S/p/ijulUXML6Xf8lnsYJ4GSV0LFpfkL65AReeXCD+gfOJe9Js0BFRGDLdCkOKKeH171EiN6b8yAwmV1LVgcSGgMoLeTjKlYYFuOSVxL798SV0LFhcCKoEKh93e3L1bt+zdq3GjR+t7TU0xtgyonDTM3wxmLVjSQ7icCKgEKhx2a9+7Vwurq3VLd3eMrULZrVol3Xdj3K3wRhrmb062FiwNIVxOBFQKjBw9Wu3d3Xrz6NE+c0PsI5gC1dVxt8AbaZm/KSwV3/rqVq387yvV1dmlzj2duuCaCxIdwuVEQKXAH/cO6806cEA/uv32sr43m+jCF2mcvynsMT275lnteH2Has+s1cyWmZKSGcLlQkChJIor4nMvw3t9JHUvv1KKDVvWnVOnjmc7PgmopIdwGARUhbGOCGEsnzcv7iZ4I8l7+Q2kcNhyasNU/XbXb9X5/zt1/NjxVIRwGARUhVViHRHDbsiqtG31UzhsWVNXo85dnTp68KhW//XqVIRwGARUAtHzSj8W6GZDsWHL3zzzG/3V3/5VZkMpHwEFeKrli9PibgIqLI3DluVEQAFAjNI2bFlOI+JuAIACq1ZpTCPDewA9qAqjoAHDUl2tqSOnxt0KIFYEVIVR0AAAw0NAeSzra6iy+t9/7303ssURIALKa1k/iynL//2coItKS8Ku6QQUAGRMUnZNp4oP8MgdWyZIp54adzOQcvl7AI6oGnFi1/T1G+NuWh/0oADPzJgRdwvSKwnDWlFIytElBFRGZLXgAMhJyrBWFJJydAkB5bFyrqFKYsFB5taQtber9qYFmjWmNe6WpFIaTuQtl6QcXUJAeSzrPZtM/vdXVcXdgtRKyrBWFJKyByABBXjijklLVavfx92M1ErKsFY5DGauLQl7ABJQgCdqLzuo5fMZ3quUpAxrhZWmuTYCCkAmJGVYK6w0zbURUBmRuYKDhLn27gY1P7E77makXjmHtXwtWU/TXBsBlQKDKSHPZMFBgky+8gPNaGGBblL4PIyWprk2AioFklhCjl6rVqmt62vaf6hBb998UG/rTUnsxec7n4fR0jTXRkABUWlvV9uLBcFTt0K662YtlKTNwaV3GtfrZ2++2eePTZwg1Z0uzRpDcPnA52G0NM21VTygzKxa0v+R1CDpDUl/7pxzlb4vELt+gTRLuuuuk/5Yw+4lUt50VHt78O/mOx/7pIclBaH1R1NO5WDDGPg+jJaEEvLBiKIHda2kPc65i83sF5L+VNIzEdwXiFTbfQVDqnWLpDpJN98c6n0XLuz9YvOf9bn+TuN67d8ljZlMaEUtTcNoPosioBZLerL3642SFomAQtK1t0s7d6qt62t9rw+ih1QuDbuXBF/sPtGkyX+8VR/Of1Ob9cEnf27GDOnUKkKrnNI0jOazKAKqVlKuxOxDSU2Ff8DMVkhaIUln1dRE0KR0oYQ8AsWG6+oWSXeF6x2VU9DTmi1tPvGQbG+XPr5uvcZM/uCT0Jo4IfjeorOYzwojLcNoPosioN6TlHtSTup93Ydzrk1SmyS1NDYyPzVElJBXQLFAam3NG29LhoULJRWZ0zr7uvX62aE3+/35liZ6WvBHFAH1vKQvKxjmWyzpexHcExiSfvNHmiXV1YWeP/JRsdCSgjmtF/f3n9OiehBxiSKgVku61MzekLRFQWAhBpwJladYyXeE80c+KjanJVE9iPhUPKCccx9LurjS98HJDWZBb1pDrGiFnUfzRz4qVT344aEP+hRiTJzAnBbKj4W66CMVu1L0/tWfHlJlFFunlasezEf1IMIioJAKfXtIvfNHrTMTV9SQRFQPolIIKCRP0S2D0lnQMBzOSWYDv47CQNWDzXc+1m8bp5amYJNcelooREDBf70bqp6Q3gq7sLZskY4elebNC0LJOamjQxo1Spo7N962LVyofvNZv+nZqhf3/wc9LRRFQGVIIhb0Fp0/+hrzR4PgXBBO27cHr+fNC8Jp+3apuTmentTJfHrkbGn3bHpaKIqAypDBVOHFEWL95o9aW6VWMX80RGZBKElBKOWCqrn5RI8qCQbqaW34tVRbZBsn1milFwGFPipeSs78UUXlQioXTlKywmkgnx7ZW4Cxue/WQm+r7xotidBKEwIKFVe0h5Sy3pEPhQm5+3Z09L3W0ZGOkCqmrkhP6+P9/6G3J/ffxolDIJOHgEJ59Sto6JXiOSRfChNy983NOeXPQUnpDal8xea0JKmrpf+c1owZwb/pbfmLgEI4/YbsvpbKHtJAfCpMMAtCMX/OKTcnNWpU+sOplGI9rQO9c1qF2zhRPegPG+hwWzMboWCTV0nakDsF18xucM49VKkGtTQ2us333FOpt0dYxXpIGQqkYvJ7LjlxFib4MtyYRF0tj/W7xo4YlTenek6Hc66l8HqpHtRTCo7HOCLpW2Z2sXPusKSbJD1UkVbCO/32sGv9rjRTmQ6kQr4VJhTel3AavFI9LaoHo1cqoE53zp0vSWZ2iaRfmNnSaJqFWKxaJUmxnhKbREkqTKB3NTTFqgfb2yUV2eGdY0nKr1RA7TCzhyWtdM79s5kdk7RBUn00TUPFDTR/dDO9o8FKUmGCL8UcSTfQOq395/SvHuQAyHAGDCjn3A1m1ioF/Vrn3Foze1nS9VE1DmVWbMugjM8fhZWUwgSfijnSqFj14G96tmqz+g8NSvS0BmvAIom4UCRRPv3PQKqTZrLDdyUkYejMt2KOrMkdS1I7nzVahYZTJIGkKVZhx/xRJJJQmOBbMUfWFDuWRAoOgGSNVnEEVJL1CyQ2VcXAklTMkSXFDoA80NvTKtzGKWs9LQIqKYr1jupWJPbY8iQMiaVJkoo5sq5UT+uJF4KjSXImTpD+aEp6CzEIKF8Vq7BLSe+IarLoJaWYAwNr2L0k+KK3t5Wb0/qwYI2WlJ6jSUoGlJl9RdKfSDpN0u8kPeucey6CdmVO/4KGRVKdUrfLN9Vk8Zk7t+/nmwspPu9kGqinlaZDIAcMKDO7W9IVkh6T9LakGkn3m9lDzrnvR9S+dGpvl3buzGRBQ1rOLEqaXDDlPt/C10iPwpL33jNABzwE0udeVqke1CWS5jvnunMXzOx/SfqlJAJqKPoN180KekgJnT8Ki2qyaDGkmm2frCopWFz8TuN6vbhfGjPZ3x0xSgXUREmXWv+nxsTKNScligVSBnpHg0U1WXQYUsVAis1pSUFPq7B6MK6eVqmAekTBtqDFriNPv/kjzeKU2AFQTRYthlQxWEPtaUVRPVhqq6P/Vuy6md1aueYkBAtih41qsugxpIowBls9WIljSYa81ZGZveKc+0LZWlDAx62Oim4ZRO8oFNZBRYctjhCFdxrX91mjJQ3+AEi2Ohqs3oHYvnNIoodUZknYGigNGFJFVIrtiHH2dev1s0P957Okwa3RKlVmfnWxywrKzVOlbw+pd/6olU1VkXwMqSIuCxdKKgitUmu0iinVgypWICFJDw+1oV7pV2EnhuyQaizQhS+KHUsSDFpdVfTPD7lIImmyskMDUApDqvDVwoXS6tXFv5euOagM79AAAGlT0YCyYJXvQ5KaJHVJutQ511POe/SbP2pdEQxOMn8EAIlW6R5Uq6SRzrn5ZvaCpC9L+pdhvxvzRwCQGZUOqH2SVvZ+fWQ4b9C/h9RK7wgAMqCsAWVmD0iak3ep3Tl3t5ldImm0pA0D/NwKSSskqabq1P6FDcwhAUDmlDWgnHP9tkEys2WSbpf0VefcsQF+rk1SmyQ1NrY4AgkAUOkiiXpJ35S0xDn3h0reC0g7todC1oyo8PtfL+kMSRvMbJOZ3VTh+wFeKdzqcohbX35iy5Zgi6Lcz+e2MNqyJVz7AJ9VtAflnLtf0v2VvAfgq3IdFMiZTsiqdC3UBTxRzlBJ2plODEWiXAgoIITCh+/x49KIESdCxbnyhEpSznTieHmUU6XnoIDUKpwXev11ac2a/vNCB/JWTQw3VHIP+nz59/ZBfq8x17Zcr/HoUb/aimSgBwUMQ+EQ3nnnSTt2SNu2Ba9nzw4ezps29f25jo6hh1RSznRK2lAk/EdAAcMw0MP4M5+RjhwJdmd+773g2oIFUkvL8EMlSWc6JWUoEsnAEB8wTPlBkXP55cF1s2AuKhdOuT/b3Dy8UJk7t++DPvd+vs3rJGEoEslBDwoYpmIP4zVrThRO1Nb2/V7YgwJ9P9MpKUORSA56UMAwFD6Mr7466Blt2yaNHh28bm4O5qXyexBpfkAPNBQ53F4jQA8KGIZiD+OmpuB7zc3B8F6U80S+rD3ieHmUEwEFDFPhw/jcc6U5c4JwkqJ7OPu29sj3oUgkB0N8QAiFD98RI0p/v9xYe4Q0owcF5IlzqGw492btEdKMHhTQK84dw8Pcu1i5O+GENCCgAMU7VBb23qw9QloxxAco3qGyMPdm7RHSjB4UMqXUAYJxDpUN996sPUKaEVCIRLlOlg3jZPM8cQ6Vhbl3UrZBAoaKIT5UnA/rdE52gODx49Jrr8UzVFaOYTrWHiGNCChUlC/HlQ9mnieuHcOTtFs5ECUCChXl0zqdkx0FEec2PWwRBPTHHBQqzpd1OoOZ54lzqIxhOqAvAgoV58M6ncJ5nmuuCf6dv/Yo6Qr/G44fL/19wHcM8aGifFmnk/Z5nsJClNdfD476aG4+MXwY5waywHAQUKgon4IhqnmeqPfzKyxEOe+8IJy2bQtez57dt0IxrqM4gKEioFBxPhUADDTPU65QiaOkfqBClM98RjpyRHrkkeA1G8giaZiDQiR8LgAo1yaxce7nV6wQ5fLL+37OhBOShh4UMq2c67TiLKkvVoiyZk3f9nd0EFJIFgIKmVbuUDnZWqtKKCxEOe+8IJy2bQuG+S6//MQcVBTtAcqFIT5kXjnXacVRUl9YiDJihNTUFIRTc3Pwmg1kkUT0oJB5A4XKUEIqF0C5nkxTk9TSEl1JfWEhyrnnSnPmnDiCnp0pkEQEFDKtHOu08iv3Ro0KwkmS3ngj2pL6wvcfMaL09wHfEVDItLDrtIoVWWzefGKRbO4a4QAMXWQBZWZ3SFrqnLswqnsCgxFmnZZPm+ECaRNJkYSZNUq6IYp7AcMRZp2WL5vhAmkTVRXfSkl3RXQvIFI+bIYLpFHZh/jM7AFJc/IuTZH0sKRtJX5mhaQVklRTc1a5mwRUjC+b4QJpVPaAcs7dmv/azB6R9CVJF0lqMrPbnHM/KPiZNkltktTY2MLfO5EYPm2GC6RNxYsknHNXS5KZTZP048JwApLOp81wgTRhJwmgDHzeDBdIqsjKzJ1z/y6JEnMAwKDQgwIAeImAAgB4iYACAHiJgAIAeImAAgB4iYACAHiJgAIAeImAAgB4iYACAHiJgAIAeImAAgB4KbK9+MIYOfKopk/fo3HjuuNuSlGHD1dr164z1dMzKu6mAEBqJCKgpk/fo4aGCZowYZrMs22inXM6dOiApD16662z424OAKRGIob4xo3r1oQJtd6FkySZmSZMqPW2dwcASZWIgJLkZTjl+Nw2AEiqxAQUACBbEjEHNRR/95c3qLurs9/16rp6fef7D4V676NHj+rGGy/VT3/681DvAwA4udQFVHdXpx44s7Hf9Vv37A71vh999JGWLPmidu16K9T7AAAGhyG+QRo7dqx++cs3dMYZZ8bdFADIBAIKAOAlAgoA4CUCCgDgpdQVSVTX1RctiKiuq4+hNQCA4UpdQIUtJT+ZV155u6LvDwAIMMQHAPASAQUA8BIBBQDwEgEFAPBSKgPKudKvAQD+S11AbdggrV17IpScC15v2BDufZ1zuu226/WVr8zXddctU09PT/jGAgAGlKqAck7q7pba20+E1Nq1wevu7nA9qZdfflE9PT16+ulf69ChD/XCC8+Ur+EAgH5StQ7KTFq2LPi6vT34R5IWLgyuhzlXsK7udK1YcbskadSo0SFbCgA4mUgCysy+Jemrkn4vablz7kjl7hWEUS6cpPDhJEnTp8+UJK1b9886evSIFi26KNwbAgBKqvgQn5lNlzTLOXeBpKclVfS8itywXr78Oakw1q9fq3/8x5X66U9/rqqqqvBvCAAYUBQ9qC9JOs3M2iXtk/T9wj9gZiskrZCkmpqzhn2j/Dmn3LBe7rUUrie1b1+nfvjD7+qxx9brlFNOGXYbkV3O9f39K3wNoK+y96DM7AEz25T7R9KPJO13zi1U0HtaUPgzzrk251yLc65l/PjJIe4tVVf3nXNatix4XV0d7mHw+OM/0b597+rKKy/SxRcv0COPPDj8N0PmbNkidXT0rS7t6AiuAyiu7D0o59yt+a/N7DZJ43pf7pI0tdz3zHfRRX3/ZpoLqbB/U/3GN/5G3/jG34RvIDLHOenoUWn79uD1vHlBOG3fLjU305MCBhLFEF+HpDt7v56hIKQqqvB/dv7nR5zMglCSglDKBVVzc3Cd30+guIoXSTjnXpL0npm9KmmHc+6VSt8T8E1+SOUQTkBpkZSZO+f+axT3AXyVm3PK19FBSAGlpGqhLuCjXDjl5pzy56AkQgoYCAEFVJiZNGpU3zmn3HDfqFGEEzCQVAbUa//2itY996T2dr2jKXUNWnrhZTrvc18I9Z49PT265Zar1Nm5VzNmNGnlSsrMMXhz5/avLqXnBJSWqs1ipSCcVj/dplmXflp//j9u0KxLP63VT7fptX8LV5vx9NP/V7NmzdW6dS9q3753tXXr62VqMbKC6lJgaFIXUOuee1KtVy7QmTMbVFVVpTNnNqj1ygVa99yTod530aIl+ou/uFM9PT06ePADTZgwsUwtBgAUk7qA2tv1js6YPqXPtTOmT9HerndCve/48eM1btw4XXxxqyZPPl3Tpk0P9X4AgNJSF1BT6hr07q69fa69u2uvptQ1hHrf998/oI8//ljr1v0/HTz4O23a9K+h3g8AUFrqAmrphZfpxcc3ac/Od3Ts2DHt2fmOXnx8k5ZeeFmo9/2Hf/ifWrt2jaqqqjR27Dh1d39UphYDAIpJXRVfrlpv3VNP6tmuZzSlrkHXfGVF6Cq+m276ur7+9ev04IM/1LRp53AeFABUWOoCSgpCKmwgFTrjjKl66qmNZX1PAMDAUjfEBwBIh8QElCvHkbgV4nPbACCpEhFQhw9X69ChA14GgXNOhw4d0OHD1XE3BQBSJRFzULt2nSlpj8aN2x93U4o6fLi6t40AgHJJRED19IzSW2+dHXczAAARSsQQHwAgewgoAICXCCgAgJfMt8o4M9svaXfc7SiDT0l6L+5GxIzPgM9A4jOQ+Ayk0p9Bo3NucuFF7wIqLcxss3OuJe52xInPgM9A4jOQ+Ayk4X0GDPEBALxEQAEAvERAVU5b3A3wAJ8Bn4HEZyDxGUjD+AyYgwIAeIkeFADASwQUAMBLBFQFmdkdZvZc3O2IgwV+Yma/NrO1ZpaIfR/LxcyqzewXZrbFzB42M4u7TVHL+u9Aviw/CyTJzL5lZr8ys6fNbPRgf46AqhAza5R0Q9ztiFGrpJHOufmSJkr6csztidq1kvY45+ZKOk3Sn8bcnjhk/XdAEs8CM5suaZZz7gJJT0sa9NEPBFTlrJR0V9yNiNE+BZ+BJB2JsyExWSzp2d6vN0paFGNb4pL134GcrD8LviTpNDNrl3SBpN8O9gcz2+UuJzN7QNKcvEtTJD0saVs8LYpekc+g3Tl3t5ldImm0pA3xtCw2tZIO9n79oaSmGNsSC+fcTknK8O+AzOxqSVuUoWdBEZMl7XfOLTOzlyQtkPSrwfwgAVUGzrlb81+b2SMK/tZwkaQmM7vNOfeDWBoXkcLPQJLMbJmk2yV91Tl3LPpWxeo9SZN6v56kjO7DlvHfAUm6WNJZytCzoIgPJe3o/XqXpKmD/UGG+CrAOXe1c26BpD+T1JHBX0iZWb2kb0pa6pw7FHd7YvC8Tsy5LJb0rzG2JRb8DvAs6NUh6fO9X89QEFKDQkChUq6XdIakDWa2ycxuirtBEVstaaqZvSHpfQWBlTVZ/x2AJOfcS5LeM7NXJe1wzr0y2J9lJwkAgJfoQQEAvERAAQC8REABALxEQAEAvERAARVmZn9vZtcWufaWmXWY2T0n+flRZvbzyrYS8A8BBcTnOwq2frnCzJYW+wNmNlbBOpIs7uWHjCOggBg55w5LekzSnwzw/Y+cc3Mk7YmyXYAPCCggfgcU7HgOIA8BBcSvRtLv4m4E4BsCCohR7xzTFTpxNAeAXgQUEI3vmNnm3n9u6732dwqOHfgn59wzMbYN8BJ78QEAvEQPCgDgJQIKAOAlAgoA4CUCCgDgJQIKAOAlAgoA4KX/BJm4HZi24jH8AAAAAElFTkSuQmCC\n",
1595 | "text/plain": [
1596 | ""
1597 | ]
1598 | },
1599 | "metadata": {
1600 | "needs_background": "light"
1601 | },
1602 | "output_type": "display_data"
1603 | }
1604 | ],
1605 | "source": [
1606 | "# 测试数据结果\n",
1607 | "X_test_lda = lda.transform(X_test_std)\n",
1608 | "\n",
1609 | "plot_decision_regions(X_test_lda, y_test, classifier=lr)\n",
1610 | "plt.xlabel('LD 1')\n",
1611 | "plt.ylabel('LD 2')\n",
1612 | "plt.legend(loc='lower left')\n",
1613 | "plt.tight_layout()\n",
1614 | "plt.show()"
1615 | ]
1616 | },
1617 | {
1618 | "cell_type": "markdown",
1619 | "metadata": {},
1620 | "source": [
1621 | "# kernel PCA "
1622 | ]
1623 | },
1624 | {
1625 | "cell_type": "markdown",
1626 | "metadata": {},
1627 | "source": [
1628 | "对于线性不可分的数据,在降维时可以使用带核函数的PCA"
1629 | ]
1630 | },
1631 | {
1632 | "cell_type": "code",
1633 | "execution_count": 80,
1634 | "metadata": {},
1635 | "outputs": [
1636 | {
1637 | "data": {
1638 | "image/png": "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\n",
1639 | "text/plain": [
1640 | ""
1641 | ]
1642 | },
1643 | "metadata": {
1644 | "needs_background": "light"
1645 | },
1646 | "output_type": "display_data"
1647 | }
1648 | ],
1649 | "source": [
1650 | "from sklearn.decomposition import KernelPCA\n",
1651 | "from sklearn.datasets import make_moons\n",
1652 | "# 数据生成\n",
1653 | "X, y = make_moons(n_samples=100, random_state=123)\n",
1654 | "# 实例化\n",
1655 | "scikit_kpca = KernelPCA(n_components=2, kernel='rbf', gamma=15)\n",
1656 | "# 数据处理\n",
1657 | "X_skernpca = scikit_kpca.fit_transform(X)\n",
1658 | "# 结果绘制\n",
1659 | "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(7, 3))\n",
1660 | "ax[0].scatter(X[:,0],X[:,1],marker='o',c=y) \n",
1661 | "\n",
1662 | "ax[1].scatter(X_skernpca[y == 0, 0], X_skernpca[y == 0, 1],\n",
1663 | " color='red', marker='^', alpha=0.5)\n",
1664 | "ax[1].scatter(X_skernpca[y == 1, 0], X_skernpca[y == 1, 1],\n",
1665 | " color='blue', marker='o', alpha=0.5)\n",
1666 | "\n",
1667 | "plt.xlabel('PC1')\n",
1668 | "plt.ylabel('PC2')\n",
1669 | "plt.show()"
1670 | ]
1671 | },
1672 | {
1673 | "cell_type": "code",
1674 | "execution_count": null,
1675 | "metadata": {},
1676 | "outputs": [],
1677 | "source": []
1678 | }
1679 | ],
1680 | "metadata": {
1681 | "kernelspec": {
1682 | "display_name": "Python 3",
1683 | "language": "python",
1684 | "name": "python3"
1685 | },
1686 | "language_info": {
1687 | "codemirror_mode": {
1688 | "name": "ipython",
1689 | "version": 3
1690 | },
1691 | "file_extension": ".py",
1692 | "mimetype": "text/x-python",
1693 | "name": "python",
1694 | "nbconvert_exporter": "python",
1695 | "pygments_lexer": "ipython3",
1696 | "version": "3.7.4"
1697 | },
1698 | "toc": {
1699 | "base_numbering": 1,
1700 | "nav_menu": {},
1701 | "number_sections": true,
1702 | "sideBar": true,
1703 | "skip_h1_title": false,
1704 | "title_cell": "Table of Contents",
1705 | "title_sidebar": "Contents",
1706 | "toc_cell": false,
1707 | "toc_position": {
1708 | "height": "calc(100% - 180px)",
1709 | "left": "10px",
1710 | "top": "150px",
1711 | "width": "274px"
1712 | },
1713 | "toc_section_display": true,
1714 | "toc_window_display": true
1715 | }
1716 | },
1717 | "nbformat": 4,
1718 | "nbformat_minor": 2
1719 | }
1720 |
--------------------------------------------------------------------------------