机器学习(基础2)

特征工程

特征工程:就是对特征进行相关的处理

一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程

特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。

特征工程API

实例化转换器对象,转换器类有很多,都是Transformer的子类, 常用的子类有:

DictVectorizer  	字典特征提取
CountVectorizer 	文本特征提取
TfidfVectorizer 	TF-IDF文本特征词的重要程度特征提取 
MinMaxScaler 		归一化
StandardScaler 		标准化
VarianceThreshold 	底方差过滤降维
PCA  				主成分分析降维

转换器对象调用fit_transform()进行转换, 其中fit用于计算数据,transform进行最终转换

fit_transform()可以使用fit()和transform()代替

data_new = transfer.fit_transform(data)
可写成
transfer.fit(data)
data_new = transfer.transform(data)

DictVectorizer 字典列表特征提取

api

  • 创建转换器对象:

    sklearn.feature_extraction.DictVectorizer(sparse=True)

    参数:

    sparse=True返回类型为csr_matrix的稀疏矩阵

    sparse=False表示返回的是数组,数组可以调用.toarray()方法将稀疏矩阵转换为数组

  • 转换器对象:

    转换器对象调用fit_transform(data)函数,参数data为一维字典数组或一维字典列表,返回转化后的矩阵或数组

    转换器对象get_feature_names_out()方法获取特征名

示例1 提取为稀疏矩阵对应的数组

from sklearn.feature_extraction import DictVectorizer
import pandas as pd 
data =[{'city':'成都','age':30,'temperature':200},{'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=False)
arr = transfer.fit_transform(data)
feature = transfer.get_feature_names_out()
ddata = pd.DataFrame(arr,columns=feature)
print(ddata)

示例2 提取为稀疏矩阵

from sklearn.feature_extraction import DictVectorizer
import pandas as pd 
data =[{'city':'成都','age':30,'temperature':200},{'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=True)
arr = transfer.fit_transform(data)
print(arr)

稀疏矩阵转为数组

稀疏矩阵对象调用toarray()函数, 得到类型为ndarray的二维稀疏矩阵

from sklearn.feature_extraction import DictVectorizer
import pandas as pd 
data =[{'city':'成都','age':30,'temperature':200},{'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=True)
arr = transfer.fit_transform(data)
print(arr)
arr1 = arr.toarray()
print(arr1)

CountVectorizer 文本特征提取

API

sklearn.feature_extraction.text.CountVectorizer

构造函数关键字参数stop_words,值为list,表示词的黑名单(不提取的词)

fit_transform函数的返回值为稀疏矩阵

英文文本提取

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
data = ['i love you','you like her','i like book']
# 创建转换器对象
transfer = CountVectorizer(stop_words=[])
# 提取,得到稀疏矩阵
data1 = transfer.fit_transform(data)
print(data1)
# data1转为对应的完整数组
data2 = data1.toarray()
# 获取特征名称
feature = transfer.get_feature_names_out()
# 创建DataFrame对象
arr = pd.DataFrame(data2,columns=feature)
print(arr)

中文文本提取

a.中文文本不像英文文本,中文文本文字之间没有空格,所以要先分词,一般使用jieba分词.

b.下载jieba组件, (不要使用conda)

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import jieba
def cut(text):return ' '.join(list(jieba.cut(text)))data = ['正义也许会迟到,但永远不会缺席','迟到的正义还是正义吗','正义和邪恶究竟哪一方会缺席']
data1 = [cut(i) for i in data]
print(data1)
transfer = CountVectorizer(stop_words=['还是'])
re = transfer.fit_transform(data1)
print(re)
feature = transfer.get_feature_names_out()
arr = re.toarray()
ddata = pd.DataFrame(arr,columns=feature)
ddata

数字代表这个词在句子中出现的频次,在代码中“还是”被作为了黑名单词,并不会进行划分

TfidfVectorizer TF-IDF文本特征词的重要程度特征提取

API

sklearn.feature_extraction.text.TfidfVectorizer()

构造函数关键字参数stop_words,表示词特征黑名单

fit_transform函数的返回值为稀疏矩阵

示例

代码与CountVectorizer的示例基本相同,仅仅把CountVectorizer改为TfidfVectorizer即可

示例中data是一个字符串list, list中的第一个元素就代表一篇文章.

from sklearn.feature_extraction.text import TfidfVectorizer,CountVectorizer
import pandas as pd
import jieba
data = ['正义也许会迟到,但永远不会缺席','迟到的正义还是正义吗','正义和邪恶究竟哪一方会缺席']
def cut(text):return ' '.join(jieba.cut(text))
data1 = [cut(i) for i in data]
transfer1 = TfidfVectorizer(stop_words=[])
transfer2 = CountVectorizer(stop_words=[])
data01 = transfer1.fit_transform(data1)
data02 = transfer2.fit_transform(data1)
# 转换成完整矩阵
arr1 = data01.toarray()
arr2 = data02.toarray()
# 获取特征名称
feature1 = transfer1.get_feature_names_out()
feature2 = transfer2.get_feature_names_out()
# 创建DataFrame对象
Data1 = pd.DataFrame(arr1,columns=feature1)
Data2 = pd.DataFrame(arr2,columns=feature2)
Data1
Data2

无量纲化-预处理

无量纲,即没有单位的数据

无量纲化包括"归一化"和"标准化", 为什么要进行无量纲化呢?

(1) MinMaxScaler 归一化

通过对原始数据进行变换把数据映射到指定区间(默认为0-1)

<1>归一化公式:

这里的 𝑥min 和 𝑥max 分别是每种特征中的最小值和最大值,而 𝑥是当前特征值,𝑥scaled 是归一化后的特征值。

若要缩放到其他区间,可以使用公式:x=x*(max-min)+min;

<2>归一化API

sklearn.preprocessing.MinMaxScaler(feature_range)

参数:feature_range=(0,1) 归一化后的值域,可以自己设定

fit_transform函数归一化的原始数据类型可以是list、DataFrame和ndarray, 不可以是稀疏矩阵

fit_transform函数的返回值为ndarray

<3>归一化示例
from sklearn.preprocessing import MinMaxScaler
data = [[19,12,15],[23,15,25],[25,18,20]]
# 定义转换后的值域
transfer = MinMaxScaler(feature_range=(0,1))
# 转换
data1 = transfer.fit_transform(data)
print(data1)

<4>缺点

最大值和最小值容易受到异常点影响,所以鲁棒性较差。所以常使用标准化的无量钢化

(2)StandardScaler 标准化

<1>标准化公式

最常见的标准化方法是Z-score标准化,也称为零均值标准化。它通过对每个特征的值减去其均值,再除以其标准差,将数据转换为均值为0,标准差为1的分布。这可以通过以下公式计算:

其中,z是转换后的数值,x是原始数据的值,μ是该特征的均值,σ是该特征的标准差

<2> 标准化 API

sklearn.preprocessing.StandardScale

与MinMaxScaler一样,原始数据类型可以是list、DataFrame和ndarray

fit_transform函数的返回值为ndarray, 归一化后得到的数据类型都是ndarray

from sklearn.preprocessing import StandardScaler
data = [[19,12,15],[23,15,25],[25,18,20]]
transfer = StandardScaler()
data1 = transfer.fit_transform(data)
print(data1)

<3>标准化示例
from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
# 获取数据
data = pd.read_csv('./src/dating.txt')
print(type(data))  # <class 'pandas.core.frame.DataFrame'>
print(data.shape)  # (1000, 4)
# 实例化一个转换器
transfer = StandardScaler()
# 调用fit_transform
data1 = transfer.fit_transform(data) # 把DataFrame数据进行标准化
print(data1[0:5])
data2 = data.values # 把DateFrame转为ndarray
data3 = transfer.fit_transform(data2) # 把ndarray数据进行标准化
print(data3[0:5])
data4 = data.values.tolist() # 把DateFrame转为list
data5 = transfer.fit_transform(data4) #把list数据进行标准化
print(data5[0:5])

特征降维

实际数据中,有时候特征很多,会增加计算量,降维就是去掉一些特征,或者转化多个特征为少量个特征

特征降维其目的:是减少数据集的维度,同时尽可能保留数据的重要信息。

特征选择

(a) VarianceThreshold 低方差过滤特征选择
  • Filter(过滤式): 主要探究特征本身特点, 特征与特征、特征与目标 值之间关联

    方差选择法: 低方差特征过滤
    • 如果一个特征的方差很小,说明这个特征的值在样本中几乎相同或变化不大,包含的信息量很少,模型很难通过该特征区分不同的对象,比如区分甜瓜子和咸瓜子还是蒜香瓜子,如果有一个特征是长度,这个特征相差不大可以去掉。

    • 过滤特征:移除所有方差低于设定阈值的特征

    • 设定阈值:选择一个方差阈值,任何低于这个阈值的特征都将被视为低方差特征。

    • 计算方差:对于每个特征,计算其在训练集中的方差(每个样本值与均值之差的平方,在求平均)。

from sklearn.feature_selection import VarianceThreshold
import pandas as pd
def variance_demo():# 1、获取数据,data是一个DataFrame,可以是读取的csv文件data=pd.DataFrame([[10,1,2],[11,3,3],[11,1,5],[11,5,7],[11,9,12],[11,3,14],[11,2,12],[11,6,9]])print(data)# 实例化一个转换器transfer = VarianceThreshold(threshold=1)# 调用fit_transformdata1 = transfer.fit_transform(data)print('data1:\n',data1)return None
variance_demo()

(b) 根据相关系数的特征选择

<1>理论

正相关性(Positive Correlation)是指两个变量之间的一种统计关系,其中一个变量的增加通常伴随着另一个变量的增加,反之亦然。在正相关的关系中,两个变量的变化趋势是同向的。当我们说两个变量正相关时,意味着:

  • 如果第一个变量增加,第二个变量也有很大的概率会增加。

  • 同样,如果第一个变量减少,第二个变量也很可能会减少。

<2>api:

scipy.stats.personr(x, y) 计算两特征之间的相关性

返回对象有两个属性:

statistic皮尔逊相关系数[-1,1]

pvalue零假设(了解),统计上评估两个变量之间的相关性,越小越相关

<3>示例:

from scipy.stats import pearsonr
import pandas as pd
def pear():# 获取数据data = pd.DataFrame([[1,2,3],[2,4,5],[3,5,4],[4,6,2],[5,8,5],[6,8,4]],columns=['1','2','3'])print(data)# 计算某两个变量之间的相关系数r1 = pearsonr(data['1'],data['2'])print(r1.statistic,r1.pvalue)
pear()

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

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

相关文章

ts中的元组概念解释(tuple)

用于定义数组每个元素的类型 元组 (Tuple) 是⼀种特殊的数组类型&#xff0c;可以存储固定数量的元素&#xff0c;并且每个元素的类型是已知的且可以不同。元组⽤于精确描述⼀组值的类型&#xff0c; ? 表示可选元素 1&#xff0c;正常写法 let list1 :[string,number] li…

Rust,删除cargo安装的可执行文件

列出安装的文件列表 cargo install --list 删除 rm /Users/ry/.cargo/bin/fancy

数据库中生成主键的方式及其优缺点

数据库中生成主键的方式及其优缺点 一、自动增长(AUTO_INCREMENT) 使用方法&#xff1a;设置auto_increment 实现数据表自增&#xff1b; 优点&#xff1a; 简单易用&#xff1a;自增主键是一种简单的方式&#xff0c;只需在数据库表中设置自增属性即可&#xff0c;无需在代…

linux进程管理

进程和线程的关系 以下介绍为linux环境 进程是操作系统中一个运行中的程序&#xff0c;是资源分配和调度的基本单位。每个进程有自己独立的内存空间、文件描述符、堆栈等系统资源 线程&#xff08;Thread&#xff09; 是 CPU 调度的最小单位&#xff0c;是进程中的一个执行流…

unity基础,点乘叉乘。

简单记录下点乘叉乘&#xff0c;要不每次用完就忘&#xff0c;忘了又查。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestCrossDot : MonoBehaviour {/// <summary>/// 原点/// </summary>public Transform t…

Vue2+ElementUI:用计算属性实现搜索框功能

前言&#xff1a; 本文代码使用vue2element UI。 输入框搜索的功能&#xff0c;可以在前端通过计算属性过滤实现&#xff0c;也可以调用后端写好的接口。本文介绍的是通过计算属性对表格数据实时过滤&#xff0c;后附完整代码&#xff0c;代码中提供的是死数据&#xff0c;可…

JAVA学习日记(十二)查找算法

一、基本查找、二分查找 略 二、分块查找 将数组分块&#xff0c;每一个块中最大值小于后一个块中的最小值&#xff1a;块内无序&#xff0c;块间有序。 块&#xff1a;创建一个块类 按照规则划分好块之后&#xff0c;对要查询的值设计方法进行查询。 import java.util.…

多线程小知识

一. CAS CAS (Compare and Swap, 比较并交换) 是一种无锁编程技术, 用于实现多线程环境下对共享资源的线程安全访问. CAS 的核心思想是: 只有当内存中的值与预期值相匹配时, 才会将内存中的值更新为新值. 寄存器1中存放原值, 寄存器2中存放新值. 现在要将内存中的原值更新为新…

C++基础(12.红黑树实现)

目录 红黑树的概念&#xff1a; 红黑树规则&#xff1a; 红黑树如何确保最长路径不超过最短路径的2倍的&#xff1f; 红黑树的效率&#xff1a; 红黑树的插入: 红黑树树插入⼀个值的大概过程: 情况1&#xff1a;变色 情况2&#xff1a;单旋变色&#xff1a; 情况3&…

代码随想录算法训练营第二十天|39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法-组合总和&#xff08;对应「leetcode」力扣题目&#xff1a;39.组合总和&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩…

机器学习基础02_特征工程

目录 一、概念 二、API 三、DictVectorize字典列表特征提取 四、CountVectorize文本特征提取 五、TF-IDF文本1特征词的重要程度特征提取 六、无量纲化预处理 1、MinMaxScaler 归一化 2、StandardScaler 标准化 七、特征降维 1、特征选择 VarianceThreshold 底方差…

得物App入选诚信案例,10万正品样品库夯实高品质消费

近日&#xff0c;以“加强企业诚信建设 赋能经济社会发展”为主题的“2024年全国企业诚信建设大会”在烟台市召开。此次大会由中国企业联合会、中国企业家协会主办&#xff0c;山东省企业联合会、山东省企业家协会、烟台市企业联合会、烟台大学承办。大会期间&#xff0c;得物A…

036 RabbitMQ消息确认 死信队列 延时队列

文章目录 生产者确认模式application.propertiesMessageController.javaMessageConfirmRallback.java 生产者回退模式application.propertiesMessageConfirmRallback.javaMessageController.java 消费者手动确认application.propertiesConsumerAckQueueListener.java 死信队列延…

docker desktop运行rabittmq容器,控制台无法访问

docker desktop运行rabittmq容器&#xff0c;控制台无法访问 启动过程&#xff1a;…此处缺略&#xff0c;网上一大堆 原因 原因是在Docker上运行的RabbitMQ&#xff0c;默认情况下是没有启用管理插件和管理页面的 解决办法 使用命令 docker exec -it 容器id /bin/bash 进…

Tailwind 安装使用

Tailwind 安装使用 前言 CSS原子化——本文将详细介绍如何在Vue Vite npm环境下安装、配置并使用Tailwind CSS&#xff01; 文章目录 Tailwind 安装使用前言一、Tailwind 在 Vue Vite 项目中的安装1. 创建Vue项目2. 安装Tailwind CSS3. 初始化Tailwind配置4. 修改文件 tai…

centos7安装playwright踩坑记录

Python版本安装 Installation | Playwright Python 1. 安装pytest-playwright pip3 install pytest-playwright报错&#xff1a;提示找不到pytest-playwright 原因&#xff1a;服务器Python版本3.6.8太低&#xff0c;貌似pytest-playwright最低支持3.7 解决方法&#xff1…

函数(C语言)

1&#xff1a;函数的概念 函数的概念我们在初中的时候就已经听过了。 在C语言中也引入了函数&#xff0c;也可以叫子程序 C语言中的函数就是一个完成某项特定的任务的一小段代码 这段代码是有特殊的写法和调用方法的。其实C语言的程序也是由无数个小的函数组成的。 也就是&…

VMWare安装包及安装过程

虚拟机基本使用 检查自己是否开启虚拟化 如果虚拟化没有开启&#xff0c;需要自行开启&#xff1a;百度加上自己电脑的品牌型号&#xff0c;进入BIOS界面开启 什么是虚拟机 所谓的虚拟机&#xff0c;就是在当前计算机系统中&#xff0c;又开启了一个虚拟系统 这个虚拟系统&…

基于SVD奇异值分解的图像压缩算法(Python实现)

前言 SVD其实和PCA类似&#xff0c;就是丢入一个特征矩阵 X &#xff0c;输出另外一个特征矩阵 X′ , X′ 的维度要比原来的X 要低。并且里面的变量都是原来的变量的线性组合&#xff0c;所以含义也变得不好解释。 简单来说就是数据压缩&#xff0c;特征降维的一种技术&#…

国产AI图片工具,全部免费亲测实用!

近AI生图功能火出圈了&#xff0c;各家大厂都拿出了看家本领&#xff0c;今天就来聊聊即梦AI、通义万相、奇域AI和腾讯元宝的AI生图功能&#xff0c;看看它们各有什么特色吧&#xff01; 一、Dreamina 字节旗下的AI智能平台&#xff0c;简单实用的图片生成&#xff0c;对中国元…