day01_04特征降维

import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA


'''
    降维一般有两种方法:1、特征选择,2、主成分分析
'''
# 特征选择中的的低方差过滤
def variance_demo():
    # 获取数据
    data = pd.read_csv("./factor_returns.csv")
    # 取出特征值的列,要所有的行,只要2到10列
    data = data.iloc[:,1:10]
    print(data)
    # 实例化一个转换器对象,threshold表示的是阈值,默认是0,低于阈值的列会被认为是低方差的列,就会被过滤掉。
    transfer = VarianceThreshold(threshold=5)
    # 调用fit_transform方法
    data_new = transfer.fit_transform(data)
    print(data_new, data_new.shape)

# 特征选择中的相关系数过滤
def index_demo():
    # 获取数据
    data = pd.read_csv("./factor_returns.csv")
    # 取出特征值的列,要所有的行,只要2到10列
    data = data.iloc[:, 1:10]
    # 求出两列间的相关系数
    r1 = pearsonr(data["pe_ratio"],data["pb_ratio"])
    # 返回结果为:(-0.004389322779936263, 0.8327205496564927),第一个值为相关系数,第二个值为显著水平
    print("r1的相关系数为:", r1)
    r2 = pearsonr(data['revenue'], data['total_expense'])
    print("r2的相关系数为:", r2)
    # 也可以用matplotlib.pyplot 的 plt 来画图观察相关性
    plt.figure(figsize=(20, 8), dpi=100)
    plt.scatter(data['revenue'], data['total_expense'])
    plt.show()

# 主成分分析
def pca_demo():
    data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]
    # 实例化一个对象,n_components = 2 表示降成两个特征
    tranfer = PCA(n_components=2)
    # 获取数据
    data_new = tranfer.fit_transform(data)
    print(data_new)

if __name__ == '__main__':
    # 特征选择中的的低方差过滤
    # variance_demo()
    # 特征选择中的相关系数过滤
    # index_demo()
    # 主成分分析
    pca_demo()

 

posted @ 2020-09-11 17:25  My帝王源  阅读(114)  评论(0)    收藏  举报