机器学习入门之 特征工程

news2025/4/7 21:05:04

数据集

数据集划分 ,训练集与 测试集合

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.feature_selection import VarianceThreshold
from sklearn.decomposition import PCA
from scipy.stats import pearsonr
import jieba
import pandas as pd

# 获取数据集
iris = load_iris()
print("鸢尾花数据集:\n", iris)
print("查看数据集描述:\n", iris["DESCR"])
print("查看特征值的名字:\n", iris.feature_names)
print("查看特征值:\n", iris.data, iris.data.shape)

# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
print("训练集的特征值:\n", x_train, x_train.shape)

特征抽取

让计算机更好理解数据 特征值化

字典特征抽取

    data = [{'city': '北京','temperature':100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature':30}]
    # 1、实例化一个转换器类
    transfer = DictVectorizer(sparse=True)
    # 2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray(), type(data_new))
    print("特征名字:\n", transfer.get_feature_names())

文本特征抽取

英文 文本特征抽取 根据空格

    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、实例化一个转换器类
    transfer = CountVectorizer(stop_words=["is", "too"])

    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())

中文 文本特征抽取 jieba 分词

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

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 1、实例化一个转换器类
    transfer = CountVectorizer(stop_words=["一种", "所以"])

    # 2、调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())

TFIDF

TF 词频 (term frequency,tf) 指的是某一个给定的词语在该文件中出现的频率
IDF - 逆向文档频率 (inverse document frequency,idf) 是一个词语普遍重要性的度
量。某一特定词语的idf 可以由总文件数目除以包含该词语之文件的数目,再将得
到的商取以10为底的对数得到

例子:

假如一篇文件的总词语数是100个,而词语“母牛”出现了3次,那么“母牛”一词在该文件中的词频就是3/100=0.03。

一个计算文件频率 (IDF) 的方法是文件集里包含的文件总数除以测定有多少份文件出现过“母牛”一词。所以,如果“母牛”一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是 lg(10,000,000 / 1,000)=4。最后的TF-IDF的分数为0.03 * 4=0.12。

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

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 1、实例化一个转换器类
    transfer = TfidfVectorizer(stop_words=["一种", "所以"])

    # 2、调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())

特征预处理

特征单位 或者大小太大 会导致 某些 特征的方差 要比其他特征大几个数量级, 容易支配影响目标结果 例如计算样本距离knn

归一化

在这里插入图片描述
例子
在这里插入图片描述
x’ = (90-60)/(90-60) =1
x’’ = 1*1+0=1

    # 1、获取数据
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]
    print("data:\n", data)

    # 2、实例化一个转换器类
    transfer = MinMaxScaler(feature_range=[2, 3])

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

缺点 :异常值:最大值、最小值 ,会影响 归一化

标准化

通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

在这里插入图片描述
X 是数据值,μ 是数据集的平均值,σ 是标准差。
例子
平均值 = (90+60+75)/3 =75
差值 = (90-75) ,(60-75), (75-75) = 15,-15,0
σ 标准差 = √((15^2 +(-15)^2 +0 )/3) = √150=12.25
x’ = (90 - (90+60+75)/3)/ 12.25 =1.22

# 1、获取数据

data = [[90,2,10,40],[65,4,15,45],[75,3,13,46]]
print("data:\n", data)

# 2、实例化一个转换器类
transfer = StandardScaler()

# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)

特征降维

降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变
量的过程

  1. 低方差特征过滤
    如果特征方差小 那说明特征比较集中 样本值相近
data = pd.read_csv("factor_returns.csv")
    data = data.iloc[:, 1:-2]
    print("data:\n", data)

    # 2、实例化一个转换器类
    transfer = VarianceThreshold(threshold=10)

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new, data_new.shape)



皮尔逊相关系数
在这里插入图片描述
例子
在这里插入图片描述

    # 计算某两个变量之间的相关系数
    r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])
    print("相关系数:\n", r1)
    r2 = pearsonr(data['revenue'], data['total_expense'])
    print("revenue与total_expense之间的相关性:\n", r2)

特征与特征之间相关性很高:
1)选取其中一个
2)加权求和
3)主成分分析

主成分分析 PCA

定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数
据、创造新的变量

作用:是数据维数压缩, 尽可能降低原数据的维数(复杂度),损失少量 信息。
回归分类使用

在这里插入图片描述

    data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]

    # 1、实例化一个转换器类
    transfer = PCA(n_components=0.95)

    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

降维 案例

## 三张表  goods 商品 goods_type 商品分类 goods_orde  用户订单
import pandas as pd
import pymysql

# 连表查出 用户 以及商品分类信息
con = pymysql.connect(host="192.168.12.211",user="root",password="root",db="xl_vip")
data_sql=pd.read_sql("SELECT g.id,g.goods_name,gt.id,gt.`name`,gt.description,gt.parent_id,go.id,go.login_name, go.pay_price from goods_order as go  INNER JOIN goods   g on go.goods_id=g.id INNER JOIN goods_type as gt on gt.id=g.goods_type_id",con)


== 进行 PCA 降维
from sklearn.decomposition import PCA

transfer = PCA(n_components=0.95)
data_new = transfer.fit_transform(table)



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

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

相关文章

【FPGA/D6】

2023年7月25日 VGA控制器 视频23notecodetb 条件编译error时序图保存与读取??RGBTFT显示屏 视频24PPI未分配的引脚或电平的解决方法 VGA控制器 视频23 note MCU单片机 VGA显示实时采集图像 行消隐/行同步/场同步/场消隐 CRT:阴极射线管 640…

8.9 PowerBI系列之DAX函数专题- TopN和BottomN和otherN的实现

需求 实现 1 summary table summarize(order_2,order_2[产品子类别],"订单金额",sum(order[订单金额])) 2 bottom5 table topn(5,summary table,summary table[订单金额],desc) // var v_sum_table summarize(order_2,order_2[产品子类别],"订单金额",…

【Linux】常见的基本指令详解

Linux常见的基本指令 一、什么是 Linux二、Linux 中常见的指令1. ls 指令2. pwd 命令3. cd 指令4. touch 指令5. mkdir 指令6. rmdir 指令 && rm 指令7. man 指令8. cp 指令9. mv 指令10. cat 指令11. more 指令12. less 指令13. wc 指令和 uniq 指令14. head 指令15. …

AIGC书籍推荐:《生成式深度学习的数学原理》

生成式 AI 使用各种机器学习算法,从数据中学习要素,使机器能够创建全新的数字视频、图像、文本、音频或代码等内容。生成式 AI 技术在近两年取得了重大突破,产生了全球性的影响。它的发展离不开近年来生成式深度学习大模型的突破。与一般意义…

【学习心得】sublime text 4 自定义编译系统

一、问题描述 在电脑中有多个版本的Python解释器,而sublime默认选择最新版本的解释器,如何指定自己想要的解释器呢? 二、自定义编译系统 1、选择新建编译系统(如图) 2、重写两个键值对(只修改中文部分其…

线性代数(主题篇):第三章:向量组 、第四章:方程组

文章目录 第3章 n维向量1.概念(1)n维单位列向量 2.向量、向量组的的线性关系(线性相关性)(1)线性表示 :AXβ(2)线性相关、线性无关: AX0①线性相关②线性无关③线性相关性7大定理 3.极大线性无关组、等价向量组、向量组的秩1.极大线性无关组2.等价向量组…

人工智能术语翻译(三)

文章目录 摘要IJKL 摘要 人工智能术语翻译第二部分,包括I、J、K、L开头的词汇! I 英文术语中文翻译常用缩写备注I.I.D. Assumption独立同分布假设Identically Distributed同分布的Identifiable可辨认的Identity Function恒等函数Identity Mapping恒等…

基于Citespace、vosviewer、R语言的文献计量学可视化分析及SCI论文高效写作方法教程

详情点击链接:基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法 前言 文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体,注重量…

小程序插件接入指引

微信对话开放平台小程序插件 微信对话开放平台是以对话交互为核心, 为有客服需求的个人、企业和组织提供智能服务与用户管理的配置平台。开发者可利用我们提供的工具自主完成对话机器人的搭建。 微信对话开放平台小程序插件,提供两种调用方式,一种是有U…

jdk1.7官网免登录下载

官网地址: Java Archive Downloads - Java SE 7 (oracle.com) 点进去之后,就可以看见如下的的界面 打开迅雷,在下载中点击新建 补充: jdk各个版本的地址: Java Archive | Oracle

春秋云境:CVE-2022-23316(taoCMS v3.0.2 存在任意文件读取漏洞)

一、题目 靶标介绍: taoCMS v3.0.2 存在任意文件读取漏洞 二、进入题目 和这题有异曲同工之妙: 春秋云境:CVE-2022-23880(taoCMS v3.0.2 任意文件上传漏洞)_小孔吃不胖的博客-CSDN博客 访问/admin admin&#xf…

汽车充电桩按照安装的地点可以分哪几类

汽车充电桩按照安装地点分哪几类 你是否曾经想过,在城市的大街小巷中,那一排排沉默的绿色盒子,究竟是什么?它们叫做汽车充电桩,是我们未来出行的重要一环。那么,你知道这些充电桩按照安装地点分哪几类吗? 汽车充电桩…

vue3:vue3.2升级至vue3.3/vue升级版本

一、目标 Vue 3.2项目到Vue 3.3 二、操作 2.1、更新Vue的版本 pnpm add vuelatest2.2、更新Vue CLI的版本 如果你正在使用Vue CLI来创建和管理你的Vue项目,更新Vue CLI pnpm add -g vue/clilatest2.3、检查你的Vue项目的依赖项 你需要确保项目中的所有依赖项…

【面试】MySQL 中InnoDB与MyISAM的区别是什么?

文章目录 前言一、数据库存储引擎二、如何知道自己的数据库用的什么引擎呢?三、存储引擎原理四、B 树和 B 树五、MyISAM六、InnoDB七、InnoDB与MyISAM的区别总结 前言 许多同学都把 MySQL 作为自己的数据库,但是可能用过最多的就是 SQL 语句&#xff0c…

降压电路原理 12V电源是如何下降到5V?

引言: 12V-5V开关电源设计原理:以12V电压作为输入,通过控制开关电路的通断时间,实现电感的充放电时间,改变输出电压的平均值,然后进行LC滤波,对输出电压进行电压和电流反馈控制,使其…

open3d和pcl点云转换及多线程加速

目录 写在前面准备转换源码编译运行结果 参考完 写在前面 1、本文内容 open3d和pcl点云互转,并使用多线程加速 2、平台/环境 通过cmake构建项目,跨平台通用;open3d,pcl 3、转载请注明出处: https://blog.csdn.net/qq…

【Visual Studio】VS调用tensorflow C++API的配置(无需编译)

1. 首先下载并安装visual studio Visual Studio 2015 安装教程(附安装包),按照博客中顺序来就可以 如果在安装过程中提示安装包损失或毁坏,参考VS2015安装过程中安装包丢失或损坏解决办法 卡在哪个搜索文件上就找到哪个文件再继…

不同编程语言复现ELO匹配机制与机制原理理解

本章概述 从数学角度分析 分别用c java python演示算法机制 数学理论 预期胜率计算公式 积分算法 为什么排位比以前更难? elo使玩家尽量其股相当 双方实力进来保证持平elo算法基于预先假设: 一名选手的当前实力受各种因素的影响会在一定范围内波动,…

【VUE】vue3 SFC方式实现九宫格效果

效果图 调用方式 <template><grid class"grid-demo" isScale><grid-item class"grid-demo-item">1</bg-grid-item><grid-item class"grid-demo-item">2</bg-grid-item><grid-item class"grid-demo…

索引的数据结构

索引的数据结构 部分资料来自B站尚硅谷-宋红康老师 1. 为什么使用索引 使用索引是为了加快数据库的查询速度和提高数据库的性能。索引是数据库表中的一种数据结构&#xff0c;它可以帮助数据库快速定位并检索所需的数据。 当数据库表中的数据量较大时&#xff0c;如果没有索…