特征筛选,归一化操作(SelectKBest,随机森林)PCA降维
## 特征筛选,归一化操作(SelectKBest,随机森林)PCA降维
SelectKBest和卡方检验,随机森林算法降维,归一化操作。
**(1)读取数据,分为特征和label值**。
```python
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
import pandas as pd
content=pd.read_csv('dynamic.csv')
x=content.iloc[:,0:-1] ##x为特征
y=content.iloc[:,-1] ##y 为label值标签
x.fillna(0,inplace=True) ##对数据空值简单用0代替,没有做特别详细预处理
```
随机森林算法和SelectKBest中对特征降维在归一化有很大的不同,随机森林是决策树不需要进行归一化/标准化操作。 概率形的算法需要对数据进行归一化,可以加快算法的运行与迭代。SelectKBest算法需要进行归一化。
**(2)采取归一化操作**
1.max-min 归一化方法
```python
for i in x.columns:
# 获取各个指标的最大值和最小值
Max = np.max(x[i])
Min = np.min(x[i])
x[i] = (x[i] - Min)/(Max - Min)
```
2.Z-Score标准化
```python
from sklearn import preprocessing
zscore = preprocessing.StandardScaler()
# 实例化Z-Score标准化方法
zscores = zscore.fit_transform(x)
# 对数据进行标准化操作
```
两者最大的区别在于,Z-Score标准化可以处理符合正态分布的数据,max-min方法容易受到极端值数据影响,比较适合均匀分布的数据,所以在选定方法之前必须要验证数据符合什么分布。
**(3)验证是否符合正态分布**
```python
import matplotlib.pyplot as plt
import seaborn as sns
for i in x.columns:
sns.distplot(x[i], rug=True, hist=False)
plt.show()
####画出图像观察图像就知道是否符合正态分布
```
<img src="https://img-blog.csdnimg.cn/20210328232753875.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzMyNDU5NA==,size_16,color_FFFFFF,t_70#pic_center" width=50%/>
**(4)随机森林算法进行特征重要性排名:**
```python
# 随机森林算法对y label重要性排名
column_list = x.columns.tolist()
clf=RandomForestRegressor()
clf.fit(x,y)
importance = clf.feature_importances_
# print(importance)
indices = np.argsort(importance)[::-1]
# print(indices)
list22=[]
for i in indices:
list22.append(column_list[i])
```
(5)用selectbest算法进行重要性排名筛选前三十名
```python
model=SelectKBest(chi2,k=30)
x_new=model.fit_transform(x,y)
scores=model.scores_
# 按重要性排序,选出最重要的 k 个
indices = np.argsort(scores)[::-1]
k_best_list=[]
for i in range(0,30):
k_best_features = x.columns[indices[i]]
k_best_list.append(k_best_features)
print('k best features are: ',k_best_list)
```
这样就完成了保存原来特征的维度下降,还有模糊原来特征主成分分析法等方法。
(6)PCA 降维模糊特征:
```python
pca=PCA(n_components=0.9)
pca=pca.fit(df[k_best_list])
x_dr=pca.transform(df[k_best_list])
```
n_components是反应原来数据的百分之多少可以通过几种方式,当它是0.9表示反应原本数据的百分之多少,数据会被降成几维我们不清楚。n_components=3.表达将维度降维3个维度。这些都是融合特征没有原来的物理意义了。
这对我很重要呜呜呜
<img src="https://img-blog.csdnimg.cn/20210328224923898.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzMyNDU5NA==,size_16,color_FFFFFF,t_70#pic_center," width=50%/>
作者:默_11b9
原文链接:https://www.jianshu.com/p/0997fe730934