机器学习的特征工程

news2025/1/12 15:56:26

字典特征提取

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编码

文本特征提取

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

结果显示

中文文本特征抽取

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

结果

中文文本抽取,自动分词

# 分词函数
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特征抽取

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

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}')

结果

标准化

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}')

结果

低方差特征过滤

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}')

结果

相关系数法

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、主成分分析

主成分分析

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

结果

综合案例分析

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/981310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《机器人学一(Robotics(1))》_台大林沛群 第 5 周【机械手臂 轨迹规划】 Quiz 5

我又行了!🤣 求解的 位置 可能会有 变动,根据求得的A填写相应值即可。注意看题目。 coursera链接 文章目录 第1题 Cartesian space求解 题1-3 的 Python 代码 第2题第3题第4题 Joint space求解 题4-6 的 Python 代码 第5题第6题其它可参考代…

leetcode 88:合并两个有序数组 。 双指针解法

题目 算法 双指针 code var merge function(nums1, m, nums2, n) {// 其实就是一个nums1数组从后向前的降序重排,从最后开始,比较nums1有效位置和nums2当前位置数的大小,依次填入,nums2最后若有剩余,则再多一步从后…

9、补充视频

改进后的dijkstra算法 利用小根堆 将小根堆特定位置更改,再改成小根堆 nodeHeap.addOrUpdateOrIgnore(edge.to, edge.weight + distance);//改进后的dijkstra算法 //从head出发,所有head能到达的节点,生成到达每个节点的最小路径记录并返回 public static HashMap<No…

Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议

Bytebase 和 GitLab 签署技术合作伙伴协议&#xff0c;携手为开发者提供流畅的数据库协作开发和管理体验。 GitLab 是世界领先的开源 AI 驱动 DevSecOps 平台&#xff0c;旨在帮助开发者团队更好协作、更高效交付软件。Bytebase 是一款为 DevOps 团队准备的数据库 CI/CD 工具&a…

一文讲解Linux内核内存管理架构

内存管理子系统可能是linux内核中最为复杂的一个子系统&#xff0c;其支持的功能需求众多&#xff0c;如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等&#xff0c;而且对性能也有很高的要求。本文从内存管理硬件架构、地址…

上海控安携汽车网络安全新研产品出席AUTOSEMO“恒以致远,共创共赢”主题研讨会

8月31日&#xff0c;AUTOSEMO“恒以致远&#xff0c;共创共赢”主题研讨会在天津成功召开。本次大会由中国汽车工业协会软件分会中国汽车基础软件生态标委会&#xff08;简称&#xff1a;AUTOSEMO&#xff09;与天津市西青区人民政府联合主办。现场汇聚了100余位来自产学研政企…

单片机-LED介绍

简介 LED 即发光二极管。它具有单向导电性&#xff0c;通过 5mA 左右电流即可发光 电流 越大&#xff0c;其亮度越强&#xff0c;但若电流过大&#xff0c;会烧毁二极管&#xff0c;一般我们控制在 3 mA-20mA 之间&#xff0c;通常我们会在 LED 管脚上串联一个电阻&#xff0c…

unity 控制Dropdown的Arrow箭头变化

Dropdown打开下拉菜单会以“Template”为模板创建一个Dropdown List&#xff0c;在“Template”上添加一个脚本在Start()中执行下拉框打开时的操作&#xff0c;在OnDestroy()中执行下拉框收起时的操作即可。 效果代码如下用于控制Arrow旋转可以根据自己的想法进行修改&#xff…

雷达有源干扰识别仿真

各类干扰信号 基于数字射频存储(DRFM)技术的雷达干扰系统有三种工作方式&#xff1a;转发方式、应答方式和噪声方式&#xff0c;即&#xff0c;对应有三种干扰类型。 噪声干扰 DRFM干扰系统在噪声工作方式下不但可以产生传统噪声干扰&#xff0c;还可以通过将数字噪声调制到干…

网络空间内生安全数学基础(1)——背景

目录 &#xff08;一&#xff09;内生安全基本定义及实现什么是内生安全理论内生安全理论实现方法动态性异构性冗余性 &#xff08;二&#xff09;安全防御和可靠性问题起源内生安全防御、可靠性保证与香农可靠通信 &#xff08;三&#xff09;总结 &#xff08;一&#xff09;…

C语言sizeof()计算空间大小为8的问题

在练习数据结构过程中&#xff0c;定义指针p&#xff0c;并且申请了10个char类型空间&#xff0c;但在计算p所指空间大小时候&#xff0c;发现了一些奇怪的现象。 #include <stdio.h> #include <stdlib.h>int main(){char s[12];printf("the size of memory …

循迹小车原理介绍和代码示例

目录 循迹小车 1. 循迹模块使用 2. 循迹小车原理 3. 循迹小车开发和调试代码 循迹小车 1. 循迹模块使用 TCRT5000传感器的红外发射二极管不断发射红外线当发射出的红外线没有被反射回来或被反射回来但强度不够大时红外接收管一直处于关断状态&#xff0c;此时模块的输出…

node版本问题

服务器下载下来的vue项目启动出现下列问题 npm ERR! path E:\vueEnv\app\node_modules\node-sass npm ERR! command failed npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node scripts/build.js npm ERR! Building: C:\Program Files\nodejs\node.exe E:\vueEnv\ap…

存储空间压缩6倍 ,多点DMALL零售SaaS场景降本实践

&#x1f9d1;‍&#x1f4bc; 作者简介 冯光普&#xff1a;多点 DMALL 数据库团队负责人&#xff0c;负责数据库稳定性建设与 DB PaaS 平台建设&#xff0c;在多活数据库架构、数据同步方案等方面拥有丰富经验。 杨家鑫&#xff1a;多点高级 DBA&#xff0c;擅长故障分析与性能…

java八股文面试[数据库]——分页查询优化

一般性分页 一般的分页查询使用简单的 limit 子句就可以实现。limit格式如下&#xff1a; SELECT * FROM 表名 LIMIT [offset,] rows 第一个参数指定第一个返回记录行的偏移量&#xff0c;注意从0开始&#xff1b; 第二个参数指定返回记录行的最大数目&#xff1b; 如果只给定…

Nomad 系列-快速上手

系列文章 Nomad 系列文章 Nomad 重要术语 Nomad 安装设置相关术语 agent - 代理。Agent 是在 Server&#xff08;服务器&#xff09; 或 Client&#xff08;客户端&#xff09; 模式下运行的 Nomad 进程。client - 客户端。Nomad 客户端负责运行分配给它的任务。它还向服务器…

JVM----GC(垃圾回收)详解

一、Automatic Garbage Collection&#xff08;垃圾回收&#xff09;简介 Automatic Garbage Collection &#xff08;自动垃圾回收&#xff09;是JVM的一个特性&#xff0c;JVM会启动相关的线程&#xff0c;该线程会轮训检查heap memeory&#xff0c;并确定哪些是未被引用的(…

滚动菜单 flutter

想实现这个功能&#xff1a; 下面的代码可以实现&#xff1a; import package:flutter/material.dart;void main() > runApp(MyApp());class MyApp extends StatelessWidget {static const String _title Flutter Code Sample;overrideWidget build(BuildContext context)…

【MySQL】CRUD (增删改查) 基础

CRUD&#xff08;增删改查&#xff09;基础 一. CRUD二. 新增 &#xff08;Create&#xff09;1. 单行数据 全列插入2. 多行数据 指定列插入 三. 查询&#xff08;Retrieve&#xff09;1. 全列查询2. 指定列查询3. 查询字段为表达式4. 别名5. 去重&#xff1a;DISTINCT6. 排序…

【算法】希尔 (Shell) 排序 详解

希尔排序 详解 希尔排序代码实现 排序&#xff1a; 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a; 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#x…