数据集的组成
目标值+特征值
行索引:可以称为样本
列索引:可以称为特征值
重复值在机器学习中不需要处理,
特征工程在机器学习中有非常重要的作用
-
特征工程的含义: 是将原始数据转换为更好的代表预测模型的潜在问题的特征的过程,提高对未知数据的预测的准确性
-
特征工程的意义:直接影响预测结果
-
使用scikit-learn库
sklearn特征抽取API
-
命令:sklearn.feature_extraction
-
作用: 对字典进行特征值化
-
类: sklearn.feature_extration.Dictvectorizer-------------vectorizer:向量化
-
特征抽取对文本等数据进行特征值化,把字典中的一些类别数据,分别转化成特征数字类型。
One-Hot编码,将特征转变成一组特征,数据表中,如果该条数据符合该特征,则赋值为1,否则为0
# 导入包,sklearn 特征提取 字典数字化
from sklearn.feature_extraction import DictVectorizer
if __name__ == '__main__':
'''
字典数据抽取
'''
# 实例化一个对象
# sparse 是一种数据格式
dict = DictVectorizer(sparse=False)
dict = DictVectorizer(sparse=True)
# 调用fit_transform
L_city = [{"city":"北京","temperature":100},{"city":"上海","temperature":80},{"city":"广州","temperature":200}]
data = dict.fit_transform(L_city)
print(dict.inverse_transform(data))
#[{'city=北京': 1.0, 'temperature': 100.0}, {'city=上海': 1.0, 'temperature': 80.0}, # {'city=广州': 1.0, 'temperature': 200.0}]
print(dict.get_feature_names())
# ['city=上海', 'city=北京', 'city=广州', 'temperature']
print(data)
#(0, 1) 1.0
#(0, 3) 100.0
#(1, 0) 1.0
#(1, 3) 80.0
#(2, 2) 1.0
#(2, 3) 200.0
文本特征抽取
第一种文本特征抽取:Count
-
对文本数据进行特征值化
-
类: sklearn.feature_extarction.text.CountVectorizer
-
CountVectorizer()
-
返回词频矩阵
-
CountVectorizer.fit_transform(x)
- x: 文本或者包含文字字符串的可迭代对象
- 返回值: 返回sparse矩阵
-
CountVectorizer.inverse_transform(x)
- x:array数组或者sparse矩阵
- 返回值:转换之前数据格式
-
CountVectorizer.get_feature_names()
- 返回: 单词列表
-
-
# 对文本进行特征值化 def text_count(): '''文本数据抽取''' # 1. 实例化CountVectorizer text = CountVectorizer() # 2. 调用fit_transform 方法输入数据并转换 text_test = ['life is short, I like python','life is too long, I dislike python'] data = text.fit_transform(text_test) data_array = data.toarray()# 将sparse矩阵转换成为array矩阵 print(data,data_array) print(text.inverse_transform(data))# 对象.inverse_transform:将sparse矩阵转换成为原来的 # 数据格式 print(text.get_feature_names())# 统计文章中所有的词,重复的只记录一次,2,对每篇文章,在词的 # 列表里进行统计每个词出现的次数 # 对于单个英文字符不进行统计
-
文本特征抽取的使用场景:Count。文本分类,情感分析等
-
对于中文文本的分析,默认是不进行分词的
处理方法: 对中文文字进行分词,使用jieba工具,
jieba使用方法:1.import jieba
jieba.cut(要切割的字符串)
注意:返回值是一个词语生成器,注意返回值的格式转换
第二种特征提取 TF–IDF
主要思想: 如果某个词或者短语在一篇文章中出现的概率高,并且在其它文章中很少出现,则认为词或者短语据 有很好的类别区分能力,适合用来分类。
TF-IDF作用:用以评估一个词对于一个文件集或一个语料库中的其它一份文件的重要性
- TF : term frequency : 词的频率 出现的次数
- IDF: inverse document frequency 逆向频率 log(总文档数量/该次出现的文档数量):输入的值越小,结果越小
类: sklearn.feature_extraction.text.TfidfVectorizer
- 该方法的调用和Count的方法相同,使用的类不同
- 得到的结果,toarray之后,数值表示的是该值的重要性
TF-IDF作用: 用以评估一字词对于一个文件集或者一个语料库中的其中的一份文件的重要程度
- 对于文本,我们想要获得文本的主题,就要获取文本中的高频特征词汇,文本特征抽取Count方法智能对词汇进行特征化,不能实现上面所说的需求,所以此处要用到tf idf
- TF: term frequency :词的频率 统计出现的次数
- idf: 逆文档频率 :inverse document frequency log(总文档数量/该词出现的文档数量),log(输入的值越小,值越小)
- tf* idf: 乘积的结果我们称之为重要性
类:sklearn
图片处理
特征的预处理:对数据进行处理
特征预处理要做的事情
通过特定的统计方法,将数据转换成算法要求的数据:
- 了解算法要求的数据格式
两种处理方法
- 数值型数据:标准缩放
- 归一化
- 标准化
- 缺失值
- 类别型数据:one-hot编码
- 时间类型:时间的切分
特征预处理的API
- sklearn.preprocessing: 所有预处理的函数都在这个模块里
归一化
- 特点: 通过对原始数据进行变化,把数据映射到0-1之间
- 公式:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2vWo056c-1591709847317)(C:\Users\sang\AppData\Roaming\Typora\typora-user-images\image-20200115212508593.png)]
归一化的步骤
- 归一化API: sklearn.preprocessing.MinMaxScalar(大小缩放)
- MinMaxScalar(feature_range=())
- 每个特征缩放到给定范围,默认是0-1
- MinMaxScalar.fit_transform(x)
- x:numpy array 格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的array
- MinMaxScalar(feature_range=())
-
实例化MinMaxScalar
-
通过fit_transform转换
数据的标准化
归一化受最大值和最小值的影响较大,鲁棒性不好,一般用于数据量比较小的数据,很少使用
所以一般使用标准化
公式:X’=(x-mean)/标准差
标准化的特点:通过对原始数据进行变换把数据变换到均值为0,方差为1的范
方差计算:每个数据与平均值做差,对差值求平方和并取均值
数据结构与算法
什么是数据结构和算法
数据结构
数据结构是存储组织数据的方式。
数据的种类有很多,字符串、整数、浮点数,同样的数据不同的组织方式就是数据结构。列表、字典都是数据结构
算法
为了实现业务的各种方法和思路就是算法
算法是一种独立的存在,不依附于代码,代码只是实现算法思想的方式而已
算法介绍
穷举法
将所有的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就放弃
算法的五大特性
1、 输入
2、 输出
3、 有穷性:有限的步骤之后结束,不会无限循环,并且每一个步骤可以在可接受的时间内完成
4、确定性
5、可行性
算法好坏的衡量–时间衡量
算法的时间效率依赖于算法执行步骤的数量,一般假定每个步骤的执行时间固定,算法的执行时间主要与执行的步骤数量有关
时间复杂度
时间复杂度可以衡量一个算法的量级,表示一个算法随着问题规模不断变化的最主要的趋势
大O记法
时间复杂度往往与大O记法一起使用
将主要关系都省略掉,最终形成一个表达式,这种方式称为daO记法
最优最坏时间复杂度
算法完成工作最少需要多少基本操作,即最优时间复杂度
最优一般不用,反应的只是最乐观理想的情况
算法完成工作最多需要多少基本步骤,即最坏时间复杂度
提供了一种保障,表名算法在此程度的算法中完成基本操作的最长时间,一般关注最坏时间复杂度
算法完成工作平局需要多少基本步骤,即平均时间复杂度
常见的时间复杂度
常数阶
线性阶
平方阶
对数阶
立方阶
时间复杂度越低,效率越高,排序如下
O(1)<O(logn) < O(n) < O(nlogn) < O(n2) < O(n3)
空间复杂度
空间复杂度定义的是算法所消耗的存储空间
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量
数据结构
概念
是存储组织数据的方式,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率,数据结构往往同高效的算法有关
数据结构的作用
相同的数据采用不同的数据结构存储带来的运行或者存储效率是不同的,数据结构是算法需要处理问题的载体,算法是为了解决实际问题而设计的
数据结构 + 算法 = 程序
内存的存储结构
内存的存储结构
整形:4个字节,字符:1个字节
数据结构的分类
线性结构:
表中的各个节点具有线性关系
- 特点:
- 线性结构是非空集
- 线性结构所有节点都最多只有一个直接前趋节点和一个直接后继结点
- 典型的线性结构: 栈、队列等
非线性结构
- 表中的各个结点之间据有多个对应关系
- 特点:
- 非线性结构是非空集
- 非线性结构的一个结点可能有多个直接前趋结点和多个直接后继结点
- 典型的非线性结构:
- 树结构和图结构
顺序表存储方式
-
什么是顺序表
- 将元素顺序的存放在一块连续的存储区域里,元素之间的关系由它们的存储舒徐自然表示
-
链表
- 将元素存放在通过链接构造起来的一系列存储块中,存储区是非连续的
顺序表存储数据的两种情况
-
一体式结构
- 数据中的数据格式相同,每条数据所占内存大小相同,这时,可以使用一体式结构存储数据,查找下一条数据只需要增加固定的偏移量就行
-
分离式结构
- 数据中存在多种格式的数据,每条数据所占存储空间大小不同,这时,在存储空间中存放每条数据的地址,地址大小固定4个字节,通过获取存储地址间接获取存储的数据,
- 直接通过下标偏移就可以找到数据所在的空间的地址,而无需遍历后才可以获取地址,所以顺序表在获取地址操作时的时间复杂度:O(1)
,元素之间的关系由它们的存储舒徐自然表示
- 链表
- 将元素存放在通过链接构造起来的一系列存储块中,存储区是非连续的
顺序表存储数据的两种情况
-
一体式结构
- 数据中的数据格式相同,每条数据所占内存大小相同,这时,可以使用一体式结构存储数据,查找下一条数据只需要增加固定的偏移量就行
-
分离式结构
- 数据中存在多种格式的数据,每条数据所占存储空间大小不同,这时,在存储空间中存放每条数据的地址,地址大小固定4个字节,通过获取存储地址间接获取存储的数据,
- 直接通过下标偏移就可以找到数据所在的空间的地址,而无需遍历后才可以获取地址,所以顺序表在获取地址操作时的时间复杂度:O(1)