数据的特征抽取

现实世界中多数特征都不是连续变量,比如分类、文字、图像等,为了对非连续变量做特征表述,需要对这些特征做数学化表述,因此就用到了特征提取. sklearn.feature_extraction提供了特征提取的很多方法

分类特征变量提取

我们将城市和环境作为字典数据,来进行特征的提取。

sklearn.feature_extraction.DictVectorizer(sparse = True)

将映射列表转换为Numpy数组或scipy.sparse矩阵

  • sparse 是否转换为scipy.sparse矩阵表示,默认开启

方法

fit_transform(X,y)

应用并转化映射列表X,y为目标类型

inverse_transform(X[, dict_type])

将Numpy数组或scipy.sparse矩阵转换为映射列表

from sklearn.feature_extraction import DictVectorizer
onehot = DictVectorizer() # 如果结果不用toarray,请开启sparse=False
instances = [{'city': '北京','temperature':100},{'city': '上海','temperature':60}, {'city': '深圳','temperature':30}]
X = onehot.fit_transform(instances).toarray()
print(onehot.inverse_transform(X))

文本特征提取(只限于英文)

文本的特征提取应用于很多方面,比如说文档分类、垃圾邮件分类和新闻分类。那么文本分类是通过词是否存在、以及词的概率(重要性)来表示。

(1)文档的中词的出现

数值为1表示词表中的这个词出现,为0表示未出现

sklearn.feature_extraction.text.CountVectorizer()

将文本文档的集合转换为计数矩阵(scipy.sparse matrices)

方法

fit_transform(raw_documents,y)

学习词汇词典并返回词汇文档矩阵

from sklearn.feature_extraction.text import CountVectorizer
content = ["life is short,i like python","life is too long,i dislike python"]
vectorizer = CountVectorizer()
print(vectorizer.fit_transform(content).toarray())

需要toarray()方法转变为numpy的数组形式

温馨提示:每个文档中的词,只是整个语料库中所有词,的很小的一部分,这样造成特征向量的稀疏性(很多值为0)为了解决存储和运算速度的问题,使用Python的scipy.sparse矩阵结构

(2)TF-IDF表示词的重要性

TfidfVectorizer会根据指定的公式将文档中的词转换为概率表示。(朴素贝叶斯介绍详细的用法)

class sklearn.feature_extraction.text.TfidfVectorizer()

方法

fit_transform(raw_documents,y)

学习词汇和idf,返回术语文档矩阵。

from sklearn.feature_extraction.text import TfidfVectorizer
content = ["life is short,i like python","life is too long,i dislike python"]
vectorizer = TfidfVectorizer(stop_words='english')
print(vectorizer.fit_transform(content).toarray())
print(vectorizer.vocabulary_)

数据的特征抽取

分类特征变量提取

In [ ]:

# 导入DictVectorizer类
from sklearn.feature_extraction import DictVectorizer # 1.实例化
# 如果结果不用toarray,请开启sparse=False
dcitvec = DictVectorizer(sparse=True)
# 准备特征值化的字典,放在一个列表中
dict = [{'city': '北京','temperature':100},{'city': '上海','temperature':60}, {'city': '深圳','temperature':30}]
# 抽取特征
sparse = dcitvec.fit_transform(dict)
print(sparse)
(0, 1) 1.0
(0, 3) 100.0
(1, 0) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0

In [ ]:

# 1.实例化
# 如果结果不用toarray,请开启sparse=False
dcitvec = DictVectorizer(sparse=False)
# 准备特征值化的字典,放在一个列表中
dict = [{'city': '北京', 'temperature': 100}, {'city': '上海',
'temperature': 60}, {'city': '深圳', 'temperature': 30}]
# 2.抽取特征
feature = dcitvec.fit_transform(dict)
feature

Out[ ]:

array([[  0.,   1.,   0., 100.],
[ 1., 0., 0., 60.],
[ 0., 0., 1., 30.]])

In [ ]:

# 获取列别名称
dcitvec.get_feature_names()

Out[ ]:

['city=上海', 'city=北京', 'city=深圳', 'temperature']

In [ ]:

# 将抽取的特征数组转换成列表
dcitvec.inverse_transform(feature)

Out[ ]:

[{'city=北京': 1.0, 'temperature': 100.0},
{'city=上海': 1.0, 'temperature': 60.0},
{'city=深圳': 1.0, 'temperature': 30.0}]

文本特征提取

计数方法

In [ ]:

# 导入CountVectorizer
from sklearn.feature_extraction.text import CountVectorizer
# 1.实例化
countvec = CountVectorizer()
# 准备特征值化的文本,放在一个列表中
text = "life is short,i like python","life is too long,i dislike python"
# 2.抽取特征
feature = countvec.fit_transform(text).toarray()
feature

Out[ ]:

array([[0, 1, 1, 1, 0, 1, 1, 0],
[1, 1, 1, 0, 1, 1, 0, 1]], dtype=int64)

In [ ]:

# 获取特证值的名称
countvec.get_feature_names()

Out[ ]:

['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

In [ ]:

# 将抽取的特征数组转换成列表
countvec.inverse_transform(feature)

Out[ ]:

[array(['is', 'life', 'like', 'python', 'short'], dtype='<U7'),
array(['dislike', 'is', 'life', 'long', 'python', 'too'], dtype='<U7')]

权重方法

In [ ]:

# 导入
from sklearn.feature_extraction.text import TfidfVectorizer
# 1. 实例化
tfid = TfidfVectorizer()
# 2. 抽取特征值
feature = tfid.fit_transform(text).toarray()
feature

Out[ ]:

array([[0.        , 0.37930349, 0.37930349, 0.53309782, 0.        ,
0.37930349, 0.53309782, 0. ],
[0.47042643, 0.33471228, 0.33471228, 0. , 0.47042643,
0.33471228, 0. , 0.47042643]])

In [ ]:

# 获取特证值的名称
tfid.get_feature_names()

Out[ ]:

['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

In [ ]:

#将抽取的特征数组转换成列表
tfid.inverse_transform(feature)

Out[ ]:

[array(['is', 'life', 'like', 'python', 'short'], dtype='<U7'),
array(['dislike', 'is', 'life', 'long', 'python', 'too'], dtype='<U7')]

机器学习基础01DAY的更多相关文章

  1. Coursera 机器学习课程 机器学习基础:案例研究 证书

    完成了课程1  机器学习基础:案例研究 贴个证书,继续努力完成后续的课程:

  2. Coursera台大机器学习基础课程1

    Coursera台大机器学习基础课程学习笔记 -- 1 最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一 机器学习是什么? 感觉和 Tom M. Mitche ...

  3. 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法

    这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...

  4. 算法工程师<机器学习基础>

    <机器学习基础> 逻辑回归,SVM,决策树 1.逻辑回归和SVM的区别是什么?各适用于解决什么问题? https://www.zhihu.com/question/24904422 2.L ...

  5. 数据分析之Matplotlib和机器学习基础

    一.Matplotlib基础知识 Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形. 通过 Matplotlib,开发者可以仅需 ...

  6. 【dlbook】机器学习基础

    [机器学习基础] 模型的 vc dimension 如何衡量? 如何根据网络结构衡量模型容量?有效容量和模型容量之间的关系? 统计学习理论中边界不用于深度学习之中,原因? 1.边界通常比较松, 2.深 ...

  7. Python机器学习基础教程-第2章-监督学习之决策树集成

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  8. Python机器学习基础教程-第2章-监督学习之决策树

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  9. Python机器学习基础教程-第2章-监督学习之线性模型

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  10. Python机器学习基础教程-第2章-监督学习之K近邻

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

随机推荐

  1. JavaScrip基本语法

    2. 上篇内容回顾 1. CSS属性 1. 高和宽 2. 字体相关 3. 文本相关 4. 背景相关 1. background-color: red 2. background-image: url( ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (184)-- 算法导论13.5 1题

    一.用go语言,对于图14-1中的红黑树 T,说明执行 OS-SELECT(T.root,10)的过程. 文心一言: 在红黑树中,OS-SELECT 是一个用于在树中查找特定键值的操作.给定一个红黑树 ...

  3. 01-Linux命令和C语言基础

    1 Linux开发环境搭建 1.1 虚拟机安装 1.安装VM Ware 2.安装ubuntu 分区 -- Linux没有盘符的概念 / -- 5000M /boot -- 系统启动过程中读取的重要文件 ...

  4. 560.和为k的数组

    1.题目介绍 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 . 子数组是数组中元素的连续非空序列. 示例 1: 输入:nums = [1,1,1], ...

  5. [转帖]会长期锁表吗?Oracle add column default 在各版本的优化

    最近大家讨论到各类数据库在新增字段带默认值时是否会锁表的问题,发现Oracle在不同的版本其实是有对应优化的,更新了下之前的知识点. 主要考虑以下三种情形,例如: 不加default:alter ta ...

  6. Oceanbase开源版 数据库恢复MySQL数据库的过程

    # Oceanbase开源版 数据库恢复MySQL数据库的过程 背景 想进行一下Oceanbase数据库的兼容性验证. 想着用app create 数据库的方式周期比较长. 所以我想着换一套 备份恢复 ...

  7. Oracle process/session/cursor/tx/tm的简单学习

    Oracle process/session/cursor/tx/tm的简单学习 Oracle的部署模式 Oracle安装时有专用模式和共享模式的区别 共享模式(Shared mode): 在共享模式 ...

  8. [转帖]kingbase(人大金仓)的一些常用表操作语句

    包括 1)创建表 2)删除表 3)加字段 4)字段换名 5)字段改类型 6)字段添加注释 7)修改字段为自增类型 8)增加主键 9)查看模式下的表 一.创建和删除表 DROP TABLE IF EXI ...

  9. [转帖]OS Watcher (OSW)系统性能监控软件

    https://www.anbob.com/archives/1143.html OS Watcher简称OSW(oswbb),用于收集并归档操作系统cpu,memery,disk io,networ ...

  10. [转帖]springboot中使用skywalking实现日志追踪

    文章目录 SkyWalking分布式追踪系统 介绍 主要架构 环境 引入依赖 配置Log4j2 下载编译好的8.7.0版本包 使用探针实现日志追踪 启动脚本 启动Java服务 访问服务 使用UI 切换 ...