机器学习的特征工程

字典特征提取

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

    return None

结果显示

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

文本特征提取

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

    return None

结果显示

中文文本特征抽取

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

    return None

结果

中文文本抽取,自动分词

python 复制代码
# 分词函数
import jieba
def cut_word(text):
    text = " ".join(list(jieba.cut(text)))
    return text

def chinese_demo2():
    """
    中文文本特征抽取,自动分词
    :return:
    """
    data = ["今天很残酷,明天更残酷,后天很美好,但绝对大多数是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用了一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相关联。"]

    # 1、分词
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 2、特征抽取
    from sklearn.feature_extraction.text import CountVectorizer
    # 1、实例化一个转换器类
    transfer = CountVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词
    # 2、调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print(f'转换后的数据:{data_final.toarray()}') # toarray()将稀疏矩阵转换成数组
    print(f'特征名字:{transfer.get_feature_names_out()}')

结果

TF-IDF特征抽取

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

结果

归一化

data.txt

python 复制代码
def guiyi_demo():
    """
    归一化
    :return:
    """
    import pandas as pd
    # 读取数据
    data = pd.read_csv("./data.txt")
    # print(data)
    data = data.iloc[:,:3]
    # print(data)
    # 归一化(针对特征值)
    from sklearn.preprocessing import MinMaxScaler
    # 1、实例化一个转换器类
    transfer = MinMaxScaler(feature_range=(0,1)) # feature_range表示归一化的范围
    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print(f'转换后的数据:{data_new}')

结果

标准化

python 复制代码
def biaozhun_demo():
    """
    标准化
    :return:
    """
    import pandas as pd
    data = pd.read_csv("./data.txt")
    data = data.iloc[:,:3]
    # 标准化
    from sklearn.preprocessing import StandardScaler
    # 1、实例化一个转换器类
    transfer = StandardScaler()
    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print(f'转换后的数据:{data_new}')

结果

低方差特征过滤

python 复制代码
def varis_demo():
    """
    过滤低方差特征
    :return:
    """
    import pandas as pd
    data = pd.read_csv("./data.txt")
    data = data.iloc[:,1:-2]
    # 过滤低方差特征
    from sklearn.feature_selection import VarianceThreshold
    # 1、实例化一个转换器类
    transfer = VarianceThreshold(threshold=0.0) # threshold表示方差的阈值
    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print(f'转换后的数据:{data_new}')

结果

相关系数法

python 复制代码
def xiangguan_demo():
    """
    相关系数法
    :return:
    """
    import pandas as pd
    data = pd.read_csv("./data.txt")
    data = data.iloc[:,1:-2]
    # 相关系数法,皮尔逊相关系数
    from scipy.stats import pearsonr
    # 1、实例化一个转换器类
    r = pearsonr(data['pe_ratio'],data['pb_ratio'])
    # 2、求出相关系数
    print(f'皮尔逊相关系数:{r}')
    # 处理方法
    # 1、选取其中一个特征
    # 2、加权求和
    # 3、主成分分析

主成分分析

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

结果

综合案例分析

python 复制代码
def instacart_demo():
    """
    instacart案例分析
    :return:
    """
    # 1、读取数据
    import pandas as pd
    order_products = pd.read_csv('./instacart/order_products__prior.csv')
    orders = pd.read_csv('./instacart/orders.csv')
    products = pd.read_csv('./instacart/products.csv')
    aisles = pd.read_csv('./instacart/aisles.csv')
    # 2、合并aisles和products表,目的:aisles_id和products在一张表中
    table1 = pd.merge(aisles,products,on=['aisles_id','aisles_id'])
    table2 = pd.merge(table1,order_products,on=['product_id','product_id'])
    table3 = pd.merge(table2,orders,on=['order_id','order_id'])
    # 3、交叉表处理
    table = pd.crosstab(table3['user_id'],table3['aisle'])
    # 4、主成分分析
    from sklearn.decomposition import PCA
    # 1、实例化一个转换器类
    transfer = PCA(n_components=0.95) # n_components表示保留多少特征信息
    # 2、调用fit_transform
    data_new = transfer.fit_transform(table)
    print(f'转换后的数据:{data_new}')
    print(f'保留的特征个数:{transfer.n_components_}')
    print(f'保留的特征百分比:{transfer.explained_variance_ratio_}')
    return None
相关推荐
qzhqbb1 小时前
基于统计方法的语言模型
人工智能·语言模型·easyui
冷眼看人间恩怨2 小时前
【话题讨论】AI大模型重塑软件开发:定义、应用、优势与挑战
人工智能·ai编程·软件开发
2401_883041082 小时前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
AI极客菌3 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭3 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^3 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
Power20246664 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k4 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫4 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班4 小时前
复现LLM:带你从零认识语言模型
人工智能·语言模型