简介
- 艾伦图灵
《模仿游戏》
图灵测试 - 机器学习与人工智能的区别
- 机器学习:
从数据中自动分析获得规律,并利用规律对未知数据进行预测; 是实现人工智能的一种手段
- 机器学习:
a 模型:模型算法,集成或者封装好的某种形式的方程\算法
b 模型的作用:预测(通过方程或算法产生一个新的数据\事物)和分类(将一个未知归类的事物归类到一个已有的类群中)
c 样本类型:即模型的训练,将样本数据代入到模型中,对其进行训练,训练好后,模型的方程就有了唯一的解或者最优解。有解后的模型就可以实现分类或者预测功能了
d 样本构成: 特征数据和标签\目标数据
e 模型的分类:有监督学习、无监督学习
f 样本数据的载体:通常不会存在数据库中,而是存储在文件中:csv格式,而数据库存储数据的问题:性能瓶颈、格式不符合(数据存储格式不符合机器学习要求的数据格式)
g 样本数据的获取途径:kaggle(数据介绍平台)、UCI数据集、sklearn
- 人工智能
特征工程
- 特征抽取:将得到的数据进行特征值化,供机器学习识别
如:
from sklearn.feature_extraction.text import CountVectorizer
vector = CountVectorizer()
res = vector.fit_transform(['life is short','life is hard'])
print(res.toarray) #<bound method _cs_matrix.toarray of <2x4 sparse matrix of type '<class 'numpy.int64'>' with 6 stored elements in Compressed Sparse Row format>>
print(res.toarray()) #[[0 1 1 1] [1 1 1 0]]
- 字典特征抽取
- 作用:对字典数据进行特征值化
from sklearn.feature_extraction import DictVectorizer
- fit_transforms(x): x为字典或者包含字典的迭代器,返回值为sparse举证
- inverse_transform(x):x为吓怕人社矩阵或者array数组,返回值为转换之前的数据格式
- transform(x) 按照原先的标准转换
- get_feature_names() 返回类别名称
sparse矩阵:
是一个变相的数组或者列表,目的是为了节省内存,在dictvectorizer 类的构造方法中设定sparse=Fasle,则返回的就不是sparse举证,而是一个数组。
onehot编码
sparse举证中0and1就是onehot编码
特征提取的主要目的就是对非数值型数据进行特征值化,如果改成onthot编码,会找到每次优先级
pandas完成onehot编码
import pandas as pd
df = pd.DataFrame([['green',2],['red',6],['blue',76],])
df.columns=['color',"age"]
print(df)
'''
color age
0 green 2
1 red 6
2 blue 76
'''
print(pd.get_dummies(df['color']))
'''
blue green red
0 0 1 0
1 0 0 1
2 1 0 0
'''
- 文本特征提取
fit_transform(x):#x为文本或者包含文本字符串的可迭代对象,返回sparse矩阵
inverse_transform(x):#x 代表array数组或者sparse矩阵,返回转换之前的格式数据
get_feature_names()
#单个字母不在进行统计,对非单个字母的单词出现次数进行统计、中文的话则是通过分隔符进行处理(空格,逗号,横岗等),可
toarray():#将sparse矩阵转换成数组
预处理
定义:对数值型的数据进行处理
- 无量纲化:
定义: 在机器学习算法中,将不同规格的数据转换成统一规格,或者不同分布的数据转换成某个特定分布的中的操作
方式:归一化、标准化
1. 归一化
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler(feature_range=(0,1))
data = [[90,2,10,40],[60,5,15,45],[73,3,13,45]]
data = mm.fit_transform(data)
print(data)
‘’‘
[[1. 0. 0. 0. ]
[0. 1. 1. 1. ]
[0.43333333 0.33333333 0.6 1. ]]
’‘’
1.1 归一化的问题
如果数据中存在较多的异常值,异常值对原始特征的最大值和最小值影响很大,因此,影响归一化后的值
1.2 总结
在特定长江下最大值和最小值是变化的,另外最大最小值很容易受到异常值的影响,所以这种归一化的方式具有一定的局限性,因此引出一种更好的方法——标准化
2. 标准化
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
data =[[90,2,10,40],[60,5,15,45],[73,3,13,45]]
print(ss.fit_transform(data))
'''
[[ 1.27540458 -1.06904497 -1.29777137 -1.41421356]
[-1.16685951 1.33630621 1.13554995 0.70710678]
[-0.10854507 -0.26726124 0.16222142 0.70710678]]
'''
特征选择
从特征中选择出有意义对模型有帮助的特征作为最终的机器学习输入的数据
2.1 在特征选择前,有三个非常重要的事情:跟数据提供者联系,跟数据提供者沟通,跟数据提供者开会——一定要了解数据
2.2 特征选择原因
冗余:部分特征的相关度较高,容易消耗计算机的性能
早点:部分特征对预测结果有偏执影响
2.3 特征选择的实验
- 人为对不相关特征进行主观舍弃
- 使用香港工具过滤掉一些无用或者权重较低的特征:filter、embedded、PVA降维
1. 过滤(方差过滤)
- 通特征本省的方差来筛选特征的类。如一个特征本身方差很小,表示样本在这个特征上基本上没有差异,那么对样本区分没有什么影响,所以无论是很慢特征工程,有限消除方位为0或者极低的特征
from sklearn.feature_selection import VarianceThreshold
v = VarianceThreshold(threshold=3)
print(v.fit_transform([[9, 2, 1, 4], [6, 5, 5, 4], [7, 3, 1, 4]]))
'''[[1]
[5]
[1]]'''
from sklearn.feature_selection import VarianceThreshold
v = VarianceThreshold(threshold=1)
print(v.fit_transform([[9, 2, 1, 4], [6, 5, 5, 4], [7, 3, 1, 4]]))
'''[[9 2 1]
[6 5 5]
[7 3 1]]'''
- 方差过滤对模型影响
准确性稍微提高,但运行时间延长
PCA降维
- 是一种分析、简化数据集的技术
- 指导思想:
如何最好的对一个立体的物体用二维表示,但是动低纬度去表示高纬度时,一定会造成一些信息差异,可以让低纬度也能正确表示高纬度事物,或者信息差异最小
from sklearn.decomposition import PCA
pca = PCA(n_components=3) #n_components 可以为小数,保留特征百分比,整数减少到特征数量
print(pca.fit_transform([[9, 2, 1, 4], [6, 5, 5, 4], [7, 3, 1, 4]]))
‘’‘
[[-2.40071521e+00 -7.54917080e-01 1.31332131e-16]
[ 3.40731782e+00 -2.38436427e-01 1.31332131e-16]
[-1.00660261e+00 9.93353507e-01 1.31332131e-16]]
’‘’