机器学习-特征工程

news2024/9/20 15:00:11

特征工程是将原始数据转换为更好的代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性

特征抽取

  1. 文本特征抽取,sklearn的API是sklearn.feature_extraction.text.CountVectorizer。

(1).英文分词
from sklearn.feature_extraction.text import CountVectorizer

#英文分词
def eng_count():

    cv = CountVectorizer() #实例化
    data = cv.fit_transform(['Today is a good day,i am so happy.','Today is my birthday,she is my girlfriend.'])  #里面是一个列表
    print(cv.get_feature_names())  #每个词的唯一值,不统计单个的词
    print(data.toarray())   #在列表中出现的次数
    return None

if __name__ == '__main__':
    eng_count()
(2).中文分词,需要用到jieba库
from sklearn.feature_extraction.text import CountVectorizer
import jieba


def jiebac():
    s1 = '今天是一个好天气,真是美好的一天。'
    s2 = '今天的你比较美,我很开心,很美好。'
    scut1 = jieba.cut(s1)  #jieba分词
    scut2 = jieba.cut(s2)
    list_scut1 = list(scut1)  #转换成列表
    list_scut2 = list(scut2)
    print(list_scut1)
    print(list_scut2)

    str1 = ' '.join(list_scut1)  #空格连接
    str2 = ' '.join(list_scut2)
    print(str1)
    print(str2)
    return str1,str2

#中文分词
def chinese_count():
    str_s1,str_s2=jiebac()
    cv = CountVectorizer() #实例化
    data = cv.fit_transform([str_s1,str_s2])  #里面是一个列表
    print(cv.get_feature_names())  #每个词的唯一值,不统计单个的词
    print(data.toarray())   #在列表中出现的次数
    return None

if __name__ == '__main__':
    chinese_count()

结论:特征抽取对文本等数据进行特征值化,就是将文本转换为数字。

2.字典的特征值化,sklearn的API是sklearn.feature_extraction.DictVectorizer,

DictVectorizer.fit_transform(x),x是字典或包含字典的迭代器,返回sparse矩阵。

from sklearn.feature_extraction import DictVectorizer

def dicts():

    dic = DictVectorizer() #实例化
    data = dic.fit_transform([{'city':'北京','tem':100},{'city':'上海','tem':80},{'city':'亳州','tem':120}])  #里面是一个列表
    print(dic.get_feature_names())  #返回类名
    print(data)  #返回sparse矩阵
    print(data.toarray())   #返回array,如上海在2出现,列看的话就是0,1,0
    return None



if __name__ == '__main__':
    dicts()

这也为One-hot编码,one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。

3.TF-IDF

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF是词频(Term Frequency),IDF是逆文本频率指数(Inverse Document Frequency).

TF是统计词频,词频 (TF) 是一词语出现的次数除以该文件的总词语数。假如一篇文件的总词语数是100个,而词语“母牛”出现了3次,那么“母牛”一词在该文件中的词频就是3/100=0.03。IDF是逆文本频率指数,为log(总的文档数量/该词出现的文档数量) 一个计算文件频率 (IDF) 的方法是文件集里包含的文件总数除以测定有多少份文件出现过“母牛”一词。所以,如果“母牛”一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是 lg(10,000,000 / 1,000)=4。最后的TF-IDF的分数为0.03 * 4=0.12如果该词出现的文档数量多,分母变大,总的文档数量不变,log(总的文档数量/该词出现的文档数量) 就越小,就越不重要。 最后的结果是TF*IDF,体现词出现的重要性。sklearn的API是sklearn.feature_extraction.text.CountVectorizer。

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ['This is the first document.', 'This document is the second document.', 'And this is the third one.', 'Is this the first document?']


tf = TfidfVectorizer()
re = tf.fit_transform(corpus)
print(tf.get_feature_names())  #每个词的唯一值,不统计单个的词
print(re.toarray())

手工计算:对于document,tf=1/5=0.2,1是出现1此,5是在第一个文本中总的词数

idf = log((1+4)/(1+3))+1使用平滑处理,是以e为底,计算为1.22314355131

tf-idf = 0.2*1.22314355131=0.24462871026与sklearn计算不一致,原因为sklearn做了归一化处理,

计算每个tf-idf 的平方根

(0.24462869**2 + 0.30216512**2 + 0.2**2 + 0.2**2 + 0.2**2)**0.5 = 0.5207177313

document:0.24462869/0.5207177313=0.469791

特征预处理 sklearn API是sklearn.preprocessing

  1. 归一化

sklearn API是sklearn.preprocessing.MinMaxScaler

from sklearn.preprocessing import MinMaxScaler


def mm():
    m = MinMaxScaler(feature_range=(0,1))  #实例化
    data = m.fit_transform([[3,4,5],[5,4,6],[7,6,7]])
    print(data)
    return None

if __name__ == '__main__':
    mm()

归一化缺点,如果异常值多的话,会对平均值影响大。

2.标准化

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

sklearn API是sklearn.preprocessing.StandardScaler

from sklearn.preprocessing import StandardScaler


def std():
    st = StandardScaler()  #实例化
    data = st.fit_transform([[3,4,5],[5,4,6],[7,6,7]])
    print(data)
    return None
if __name__ == '__main__':
    std()

3.缺失值处理

一般使用pandas进行处理缺失值,在sklearn中的API是:sklearn.impute.SimpleImputer

是按列进行填充,

from sklearn.impute import SimpleImputer
import numpy as np


def im():
    imp = SimpleImputer(missing_values=np.nan, strategy='mean')
    data = imp.fit_transform([[1,2,3],[3,np.nan,8],[5,6,np.nan]])
    print(data)
    return None

if __name__ == '__main__':
    im()

One-Hot编码

独热编码即 One-Hot 编码,又称一位有效编码。其方法是使用 N位 状态寄存器来对 N个状态 进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。

在sklearn中的API是:sklearn.preprocessing.OneHotEncoder

from sklearn.preprocessing import OneHotEncoder

def one():
    onehot = OneHotEncoder()   #实例化

    data = onehot.fit([[1,2,3],[3,5,8],[5,6,7]])   #训练,3个数据,3个特征
    data1 = onehot.transform([[1,5,7]])   #测试,数据包含于训练数据
    print(data1.toarray())
    return None

if __name__ == '__main__':
    one()

输出结果是进行排序了,

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

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

相关文章

Smart Finance 热启动创世开启,参与质押瓜分SMART资产

在2023年开年以来,加密市场开始迎来复苏,以BTC、ETH等为代表的主流加密资产迎来普涨,虽然相较于2021年顶峰时期相比仍存在一定的差距,但市场的回暖正在带动加密行业在2023年的复苏。而随着DigiDaigaku登录美国体育盛会“超级碗”&…

手把手教你抢BingChatGPT免费体验名额!

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :ChatGPT-Bing 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永…

关于docker在CentOS6与CentOS7的安装教程

CentOS 6 安装docker步骤yum install -y epel-releaseyum install -y docker-io安装后的配置文件:/etc/sysconfig/docker启动Docker后台服务:service docker startdocker version验证CentOS 7 安装docker步骤感兴趣的可以看看docker安装文档https://docs…

企业如何解决内容审核的安全风险?

内容审核是什么?随着互联网的快速发展,与之而来的是信息爆炸式增长,而且这些互联网信息良莠不齐,其发布者也鱼龙混杂,常常混入很多不良或者违规违法信息,例如涉政、涉黄、暴恐、违禁、不良价值观、广告等。…

使用FirewallD构建动态防火墙(9)

预备知识 firewalld 是新一 Linux 代防火墙工具,它提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具。它也支持允许服务或者应用程序直接添加防火墙规则的接口。在 Linux 历史上已经使用过的防火墙工具包括:ipfwa…

redis命令大量超时 连接数突增

大家好,我是烤鸭: 今天分享一个线上线上redis命令大量超时,连接数突增的问题。由于不是我这边的业务,只能根据事后的一些客观数据进行分析。 配置: ​ redis 4.0 3主3从,总内存36G。 ​ 业务服务7台…

跨平台代码编写工具 Visual Studio Code

随着生产力的提高,生产工具也在不断的提高。 今天就介绍 目前最好用的工具 Visual Studio Code。 1. 入门 Visual Studio Code 是一款轻量级但功能强大的源代码编辑器,可在您的桌面上运行,适用于 Windows、macOS 和 Linux。它内置了对 Java…

蓝库云|制造业转型不可或缺的“PLM”的作用和真正价值

PLM是产品生命周期管理,是一种应用于在单一地点的企业内部、分散在多个地点的企业内部,以及在产品研发领域具有协作关系的企业之间的,支持产品全生命周期的信息的创建、管理、分发和应用的一系列应用解决方案,它能够集成与产品相关…

如何短期通过PMP考试?

PMP考试相比较其他考试,首先就是PMP是不卡通过率的,所以只要你做题的正确率上去了,那是有很大机会能通过考试的!想要短期通过PMP考试,就得每天安排具体的任务,规划好,按计划去做。抓紧时间&…

QFramework框架学习

主要学习内容TypeEventSystemActionKitTimer类1、TypeEventSystem-适用于一个条件触发,多个组件响应的情况例如:动物园系统中,点击肉食动物按钮,动物园中有肉食属性的动物都进行显示。步骤:1、动物自身脚本上进行判断是…

产品的可持续发展

如今,产品的可持续性对于取得商业成功至关重要。越来越多的政府提出了相关的合规性要求,普通消费者也在翘首期待符合可持续性发展理念的产品上市。然而,许多企业面临的首要问题是如何确定他们的产品是否满足可持续性发展的要求。 毕竟&#x…

后量子 KEM 方案:LAC

参考文献: Lyubashevsky V, Peikert C, Regev O. On ideal lattices and learning with errors over rings[J]. Journal of the ACM (JACM), 2013, 60(6): 1-35.Lu X, Liu Y, Zhang Z, et al. LAC: Practical ring-LWE based public-key encryption with byte-leve…

java -数据结构,List相关基础知识,ArrayList的基本使用,泛型的简单、包装类介绍

一、 预备知识-泛型(Generic) 1.1、泛型的引入 比如:我们实现一个简单的顺序表 class MyArrayList{public int[] elem;public int usedSize;public MyArrayList(){this.elem new int[10];}public void add(int key){this.elem[usedSize] key;usedSize;}public …

Ethercat系列(4)Twcat3激活配置过程的协议分析

广播设置ESC的4个端口环路设置从-》主广播读从站状态机实际状态主-》从从-》主广播清除接收错误计数器0x300且读应用层状态从-》主顺序读从站基本信息,链路层配置与状态从-》主广播读从站状态机状态主-》从从-》主顺序写ESC控制模式,广播读从站状态主-》…

一、图机器学习导论【CS224W】(Datawhale组队学习)

开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页:https://web.stanford.edu/class/cs224w 文章目录前…

C++中的标准输入和输出

一、 C 输入输出的含义 在C语言中我们的输入和输出都是以printf和scanf进行操作的。他们都是函数。在C中的我们的输入输出都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从操作系统(Linux)的角度看,每一个与主机相连的输…

RKE2部署高可用Rancher v2.7.1

先决条件 注意修改主机名,不要有冲突 第一个server节点安装 官方文档的描述感觉对于新手来说太不友好了,建议以下链接都看一下。Rancher新老文档都建议看一下,不然刚刚入门很蒙。 RKE2快速开始:https://docs.rke2.io/zh/install…

html+css综合练习一

文章目录一、小米注册页面1、要求2、案例图3、实现效果3.1、index.html3.2、style.css二、下午茶页面1、要求2、案例图3、index.html4、style.css三、法国巴黎页面1、要求2、案例图3、index.html4、style.css一、小米注册页面 1、要求 阅读下列说明、效果图,进行静…

由浅入深,聊聊OkHttp的那些事(很长,很细节)

引言 在 Android 开发的世界中,有一些组件,无论应用层技术再怎么迭代,作为基础支持,它们依然在那里。 比如当我们提到网络库时,总会下意识想到一个名字,即 OkHttp 。 尽管对于大多数开发者而言&#xff0…

spark02-内存数据分区分配原理

代码:val conf: SparkConf new SparkConf().setMaster("local[*]").setAppName("wordcount") val scnew SparkContext(conf) //[1] [2,3] [4,5] val rdd: RDD[Int] sc.makeRDD(List(1,2,3,4,5),3) //将处理的数据保存分区文件 rdd.saveAsText…