• 机器学习的特征工程


    字典特征提取

    1. def dict_demo():
    2. """
    3. 字典特征提取
    4. :return:
    5. """
    6. data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]
    7. # data = [{'city':['北京','上海','深圳']},{'temperature':["100","60","30"]}]
    8. from sklearn.feature_extraction import DictVectorizer
    9. # 1、实例化一个转换器类
    10. transfer = DictVectorizer(sparse=False) # sparse=False表示不用稀疏矩阵存储,稀疏矩阵存储的好处是节省内存,但是不方便观察,所以一般不用
    11. # 2、调用fit_transform
    12. data_new = transfer.fit_transform(data)
    13. print(f'转换后的数据:{data_new}')
    14. print(f'特征名字:{transfer.get_feature_names_out()}') # ['city=上海' 'city=北京' 'city=深圳' 'temperature']
    15. return None

    结果显示

    注意:如果特征中存在非数值类型数据,需要转换成字典然后使用one-hot编码

    文本特征提取

    1. def text_demo():
    2. """
    3. 文本特征提取
    4. :return:
    5. """
    6. data = ["life is short,i like python","life is too long,i dislike python"]
    7. from sklearn.feature_extraction.text import CountVectorizer
    8. # 1、实例化一个转换器类
    9. transfer = CountVectorizer()
    10. # 2、调用fit_transform
    11. data_new = transfer.fit_transform(data)
    12. print(f'转换后的数据:{data_new.toarray()}') # toarray()将稀疏矩阵转换成数组
    13. print(f'特征名字:{transfer.get_feature_names_out()}')
    14. return None

    结果显示

    中文文本特征抽取

    1. def chinese_demo():
    2. """
    3. 中文文本特征抽取
    4. :return:
    5. """
    6. data = ["我 爱 北京 天安门","天安门 上 太阳 升"]
    7. from sklearn.feature_extraction.text import CountVectorizer
    8. # 1、实例化一个转换器类
    9. transfer = CountVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词
    10. # 2、调用fit_transform
    11. data_new = transfer.fit_transform(data)
    12. print(f'转换后的数据:{data_new.toarray()}') # toarray()将稀疏矩阵转换成数组
    13. print(f'特征名字:{transfer.get_feature_names_out()}')
    14. return None

    结果

    中文文本抽取,自动分词

    1. # 分词函数
    2. import jieba
    3. def cut_word(text):
    4. text = " ".join(list(jieba.cut(text)))
    5. return text
    6. def chinese_demo2():
    7. """
    8. 中文文本特征抽取,自动分词
    9. :return:
    10. """
    11. data = ["今天很残酷,明天更残酷,后天很美好,但绝对大多数是死在明天晚上,所以每个人不要放弃今天。",
    12. "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
    13. "如果只用了一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相关联。"]
    14. # 1、分词
    15. data_new = []
    16. for sent in data:
    17. data_new.append(cut_word(sent))
    18. # print(data_new)
    19. # 2、特征抽取
    20. from sklearn.feature_extraction.text import CountVectorizer
    21. # 1、实例化一个转换器类
    22. transfer = CountVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词
    23. # 2、调用fit_transform
    24. data_final = transfer.fit_transform(data_new)
    25. print(f'转换后的数据:{data_final.toarray()}') # toarray()将稀疏矩阵转换成数组
    26. print(f'特征名字:{transfer.get_feature_names_out()}')

    结果

    TF-IDF特征抽取

    1. def tf_idf_demo():
    2. """
    3. tf-idf特征抽取
    4. :return:
    5. """
    6. data = ["今天很残酷,明天更残酷,后天很美好,但绝对大多数是死在明天晚上,所以每个人不要放弃今天。",
    7. "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
    8. "如果只用了一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相关联。"]
    9. # 1、分词
    10. data_new = []
    11. for sent in data:
    12. data_new.append(cut_word(sent))
    13. # print(data_new)
    14. # 2、特征抽取
    15. from sklearn.feature_extraction.text import TfidfVectorizer
    16. # 1、实例化一个转换器类
    17. transfer = TfidfVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词
    18. # 2、调用fit_transform
    19. data_final = transfer.fit_transform(data_new)
    20. print(f'转换后的数据:{data_final.toarray()}') # toarray()将稀疏矩阵转换成数组
    21. print(f'特征名字:{transfer.get_feature_names_out()}')

    结果

    归一化

    data.txt

    1. def guiyi_demo():
    2. """
    3. 归一化
    4. :return:
    5. """
    6. import pandas as pd
    7. # 读取数据
    8. data = pd.read_csv("./data.txt")
    9. # print(data)
    10. data = data.iloc[:,:3]
    11. # print(data)
    12. # 归一化(针对特征值)
    13. from sklearn.preprocessing import MinMaxScaler
    14. # 1、实例化一个转换器类
    15. transfer = MinMaxScaler(feature_range=(0,1)) # feature_range表示归一化的范围
    16. # 2、调用fit_transform
    17. data_new = transfer.fit_transform(data)
    18. print(f'转换后的数据:{data_new}')

    结果

    标准化

    1. def biaozhun_demo():
    2. """
    3. 标准化
    4. :return:
    5. """
    6. import pandas as pd
    7. data = pd.read_csv("./data.txt")
    8. data = data.iloc[:,:3]
    9. # 标准化
    10. from sklearn.preprocessing import StandardScaler
    11. # 1、实例化一个转换器类
    12. transfer = StandardScaler()
    13. # 2、调用fit_transform
    14. data_new = transfer.fit_transform(data)
    15. print(f'转换后的数据:{data_new}')

    结果

    低方差特征过滤

    1. def varis_demo():
    2. """
    3. 过滤低方差特征
    4. :return:
    5. """
    6. import pandas as pd
    7. data = pd.read_csv("./data.txt")
    8. data = data.iloc[:,1:-2]
    9. # 过滤低方差特征
    10. from sklearn.feature_selection import VarianceThreshold
    11. # 1、实例化一个转换器类
    12. transfer = VarianceThreshold(threshold=0.0) # threshold表示方差的阈值
    13. # 2、调用fit_transform
    14. data_new = transfer.fit_transform(data)
    15. print(f'转换后的数据:{data_new}')

    结果

    相关系数法

    1. def xiangguan_demo():
    2. """
    3. 相关系数法
    4. :return:
    5. """
    6. import pandas as pd
    7. data = pd.read_csv("./data.txt")
    8. data = data.iloc[:,1:-2]
    9. # 相关系数法,皮尔逊相关系数
    10. from scipy.stats import pearsonr
    11. # 1、实例化一个转换器类
    12. r = pearsonr(data['pe_ratio'],data['pb_ratio'])
    13. # 2、求出相关系数
    14. print(f'皮尔逊相关系数:{r}')
    15. # 处理方法
    16. # 1、选取其中一个特征
    17. # 2、加权求和
    18. # 3、主成分分析

    主成分分析

    1. def pca_demo():
    2. """
    3. 主成分分析
    4. :return:
    5. """
    6. data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]
    7. # 主成分分析
    8. from sklearn.decomposition import PCA
    9. # 1、实例化一个转换器类
    10. # transfer = PCA(n_components=0.9) # n_components表示保留多少特征信息
    11. transfer = PCA(n_components=2) # n_components表示保留的特征个数
    12. # 2、调用fit_transform
    13. data_new = transfer.fit_transform(data)
    14. print(f'转换后的数据:{data_new}')
    15. print(f'保留的特征个数:{transfer.n_components_}')
    16. print(f'保留的特征百分比:{transfer.explained_variance_ratio_}')
    17. return None

    结果

    综合案例分析

    1. def instacart_demo():
    2. """
    3. instacart案例分析
    4. :return:
    5. """
    6. # 1、读取数据
    7. import pandas as pd
    8. order_products = pd.read_csv('./instacart/order_products__prior.csv')
    9. orders = pd.read_csv('./instacart/orders.csv')
    10. products = pd.read_csv('./instacart/products.csv')
    11. aisles = pd.read_csv('./instacart/aisles.csv')
    12. # 2、合并aisles和products表,目的:aisles_id和products在一张表中
    13. table1 = pd.merge(aisles,products,on=['aisles_id','aisles_id'])
    14. table2 = pd.merge(table1,order_products,on=['product_id','product_id'])
    15. table3 = pd.merge(table2,orders,on=['order_id','order_id'])
    16. # 3、交叉表处理
    17. table = pd.crosstab(table3['user_id'],table3['aisle'])
    18. # 4、主成分分析
    19. from sklearn.decomposition import PCA
    20. # 1、实例化一个转换器类
    21. transfer = PCA(n_components=0.95) # n_components表示保留多少特征信息
    22. # 2、调用fit_transform
    23. data_new = transfer.fit_transform(table)
    24. print(f'转换后的数据:{data_new}')
    25. print(f'保留的特征个数:{transfer.n_components_}')
    26. print(f'保留的特征百分比:{transfer.explained_variance_ratio_}')
    27. return None

  • 相关阅读:
    Unity学习资源(超全)汇总 基础+项目+进阶+面试
    pytorch的函数(如squeeze,permute,flatten,numel,matmul)
    Servlet是什么?怎么使用?
    Java真的不难(四十五)SpringMVC的入门
    vue前端导出Excel
    mysql in查询,同时查询两个字段
    使用USB ISP给AT89S51下载固件
    《动手学深度学习 Pytorch版》 4.8 数值稳定性和模型初始化
    MySQL之MHA高可用配置及故障切换
    基础架构之持续发布
  • 原文地址:https://blog.csdn.net/weixin_42289227/article/details/132699952