**
机器学习
**
机器学习发展背景
1.机器学习奠基人
“人工智能之父” 艾伦.图灵
马文·李·闵斯基(英语:Marvin Lee Minsky,1927年8月9日-2016年1月24日),科学家,专长于认知科学与人工智能领域,麻省理工学院人工智能实验室的创始人之一,著有几部人工智能和哲学方面的作品。1969年,因为在人工智能领域的贡献,获得图灵奖。
2.机器学习发展
机器学习包含人工智能,人工智能包含深度学习。机器学习在1950年就被提成,但是并没有迅速发展,是因为当时计算机硬件(cpu,gpu)等限制了其发展;1980-2010机器学习得到长足发展,但是受制于数据量(数据量太小,无法很好的进行深度学习)和计算机硬件制约,并没有爆发式发展;当了目前由于大数据的到来,使得人工智能,机器学习,深度学习开始迅猛发展。
目前深度学习主要应用领域:图像识别(医疗上癌症诊断,无人驾驶等;自然语言处理,分析用户评论情感)
3.机器学习库和框架
机器学习语言排名
初次学习机器学习目标
以算法、案例为驱动的学习,浅显易懂的数学知识
参考书比较晦涩难懂,不建议去直接读
熟悉机器学习各类算法的原理
掌握算法的使用,能够结合场景解决实际问题
掌握使用机器学习算法库和框架的技能
学习概要
机器学习第一天
学习内容概要
- 1 机器学习概述
- 2数据集的结构
- 3 数据的特征工程
- 4数据的类型
- 5机器学习算法基础
一 机器学习概述
- 1什么是机器学习
机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测 - 2为什么需要机器学习
- 3机器学习的应用场景
机器学习在各个领域带来的价值
领域:
医疗、航空、教育、物流、电商……
例子:一个汽车零售商将客户按照对汽车的喜好划分成不同的类,这样营销
人员就可以将新型汽车的广告手册直接邮寄到有这种喜好的客户手中,
从而大大增加了商业机会
二 数据集结构
- 1.可用的数据集
一般数据集来源:scikit-learn,kaggle,uci
- 2.数据集结构
数据集结构:特征值+目标值
三 数据的特征工程
- 1.特征工程是什么
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性 - 2.特征工程的意义
直接影响预测结果 - 3.scikit-learn 库介绍
- 4.数据的特征提取
- 5.数据的特征处理
- 6.数据的降维
3.4 数据的特征抽取
3.4.1 数据特征抽取实例演示
# 文本特征抽取
from sklearn.feature_extraction.text import CountVectorizer
# 实例化CountVectorizer
vector = CountVectorizer()
# 调用fit_transform输入并转换数据
res = vector.fit_transform(["life is short,i like python","life is too long,i dislike python"])
# 打印结果
print(vector.get_feature_names())
print(res.toarray())
需要进行特征抽取数据:
特征抽取针对非连续型数据
特征抽取对文本等进行特征值化
连续型数据不要进行特征抽取
特征值化是为了计算机更好的去理解数据
3.4.2 sklearn特征抽取api
sklearn.feature_extraction
3.4.3 字典特征抽取
作用:对字典数据进行特征值化
类:sklearn.feature_extraction.DictVectorizer
DictVectorizer.fit_transform(X)
X:字典或者包含字典的迭代器
返回值:返回sparse矩阵
DictVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式
DictVectorizer.get_feature_names()
返回类别名称
DictVectorizer.transform(X)
按照原先的标准转换
运用流程
1.实例化类DictVectorizer
2.调用fit_transform方法输入数据并转换 注意返回格式
from sklearn.feature_extraction.dict_vectorizer import DictVectorizer
"""
字典特征抽取
:return: None
"""
# 实例化
dict = DictVectorizer(sparse=False)
# 调用fit_transform
data = dict.fit_transform([{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}])
# 打印处理之后列名称
print(dict.get_feature_names())
print(data)
one-hot编码分析
3.4.4 文本特征抽取
对英文文本进行特征抽取
作用:对文本数据进行特征值化,对英文可以直接进行文本特征处理;对中文需要先进行jieba分词之后才可以;因为算法是根据空格对文本进行划分。
类:sklearn.feature_extraction.text.CountVectorizer
CountVectorizer()
返回词频矩阵
CountVectorizer.fit_transform(X,y)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式
CountVectorizer.get_feature_names()
返回值:单词列表
运用流程
1.实例化类CountVectorizer
2.调用fit_transform方法输入数据并转换
注意返回格式,利用toarray()进行sparse矩阵转换array数组
# 对英文文本进行特征抽取,只是统计了每个词出现的频率,无法对文本进行分析
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
data = cv.fit_transform(["life is short,i i like python", "life is too too long,i dislike python"])
print(cv.get_feature_names())
print(data.toarray())
对中文文本进行特征抽取
sklearn不支持对单个中文进行特征值话,需要对中文进行分词才能详细的进行特征值化。
一般利用jieba分词对中文进行分词
import jieba
jieba.cut("对中文文本进行分词")
分词后返回一个迭代器(返回值:词语生成器)
对下面三段话进行特征值化
1、今天很残酷,明天更残酷,后天很美好,
但绝对大部分是死在明天晚上,所以每个人不要放弃今天。
2、我们看到的从很远星系来的光是在几百万年之前发出的,
这样当我们看到宇宙时,我们是在看它的过去。
3、如果只用一种方式了解某样事物,你就不会真正了解它。
了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。
TF-IDF
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,
并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分
能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
类:sklearn.feature_extraction.text.TfidfVectorizer
用法
TfidfVectorizer(stop_words=None,…)
返回词的权重矩阵
TfidfVectorizer.fit_transform(X)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
TfidfVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前数据格式
TfidfVectorizer.get_feature_names()
返回值:单词列表
from sklearn.feature_extraction.text import TfidfVectorizer
# 进行分词
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
# 处理分词结果
content1 = []
content2 = []
content3 = []
for word in con1:
content1.append(word)
for word in con2:
content2.append(word)
for word in con3:
content3.append(word)
# 空格隔开的字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
# 分词处理
c1, c2, c3 = cutword()
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())
3.5 数据的特征处理
- 1、特征处理的方法
- 2、sklearn特征处理API
特征处理定义:
特征抽取后在对数据特征进行处理。
通过特定的统计方法(数学方法)将数据转换成算法要求的数据
3.5.1 特征处理方法
- 数值型数据:标准缩放:
1、归一化
2、标准化
3、缺失值 - 类别型数据:one-hot编码
- 时间类型:时间的切分
3.5.1.1 归一化
特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
注:作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’
为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0
sklearn 归一化API
sklearn归一化API: sklearn.preprocessing.MinMaxScaler
MinMaxScaler语法
MinMaxScalar(feature_range=(0,1)…)
每个特征缩放到给定范围(默认[0,1])
MinMaxScalar.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array
归一化步骤:
1、实例化MinMaxScalar
2、通过fit_transform转换
归一化适用场景:
注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
归一化
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler(feature_range=(0, 1))
data = mm.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])
print(data)
3.5.1.2 标准化
- 定义:通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
- 公式
- sklearn特征化API
sklearn特征化API: scikit-learn.preprocessing.StandardScaler - StandardScaler语法
- 标准化步骤
1、实例化StandardScaler
2、通过fit_transform转换 - 适用场景
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)
3.5.1.3 缺失值
一般不利用sklearn处理缺失值,一般用pandas处理缺失值,sklear对缺失值处理没有pandas方便。
3.6 数据降维
- 特征选择
- 主层分析
3.6.1 特征选择
-
特征选择定义
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。 -
特征选择api
sklearn.feature_selection.VarianceThreshold -
其他特征选择方法
主要方法(三大武器):
Filter(过滤式):VarianceThreshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)
示例
"""
删除低方差特征
"""
from sklearn.feature_selection import VarianceThreshold
var = VarianceThreshold(threshold=0.4)
data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
3.6.2 主层分析
- 定义
- api
3.6.2.1 定义
本质:PCA是一种分析、简化数据集的技术
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
3.6.2.2 api
sklearn. decomposition
from sklearn.decomposition import PCA
pc = PCA(n_components=0.3)
data = pc.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
特征选择和pca区别
特征选择适合特征数量不多(5,10,20,30)时利用。
pca适用于特征数量非常多(100以上)是运用。
四 机器学习基础
- 机器学习开发流程
- 机器学习模型
- 机器学习算法分类
4.1 机器学习开发流程
- 1.机器学习基础
- 1.1 算法是核心,数据和计算是基础
- 1.2 大部分复杂模型的算法设计都是算法工程师在做,而我们
分析很多的数据
分析具体的业务
应用常见的算法
特征工程、调参数、优化 - 1.3 基本掌握
学会分析问题,使用机器学习算法的目的,想要算法完成何种任务
掌握算法基本思想,学会对问题用相应的算法解决
学会利用库或者框架解决问题
4.2 机器学习模型
数据类型
离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,所有这些数据全部都是整数,而且不能再细分,也不能进一步提高他们的精确度。
连续型数据:变量可以在某个范围内取任一数,即变量的取值可以是连续的,如,长度、时间、质量值等,这类整数通常是非整数,含有小数部分。
注:只要记住一点,离散型是区间内不可分,连续型是区间内可分
4.3 机器学习算法分类
监督学习两大主要运用
- 分类
- 回归
分类:分类是监督学习的一个核心问题,在监督学习中,当输出变量取有限个离散值时,预测问题变成为分类问题。最基础的便是二分类问题,即判断是非,从两个类别中选择一个作为预测结果;
回归:回归是监督学习的另一个重要问题。回归用于预测输入变量和输出变量之间的关系,输出是连续型的值。