一、机器学习简介
(一)简单介绍
1、“人工智能之父”——图灵
图灵测试(1950)
2、马文·李·闵斯基:把人工智能推向了全世界;
3、人工智能(1950—)------》机器学习(80年代)------》深度学习(2010年以后)
深度学习:图像识别、自然语言处理(可以用程序写一篇报导)、预测(如信贷需求预测、店铺销量预测)、传统预测
影响人工智能的两个因素:①硬件;②数据;③算法(☆)
(二)机器学习用到的库和框架
scikitlearn、TensorFlow、caffe2、chainer
1、机器学习用到的库的发布方即支持语言
框架 | 机构 | 支持语言 |
---|
TensorFlow | Google | Python/C++/Go |
Caffe | BVLC | Python/C++ |
Keras | fchollet | python |
CNTK | Microsoft | C++ |
MXNet | DMLC | python/C++/R |
Torch7 | Fcaebook | Lua |
Theano | U.Montreal | python |
Deeplearning | Deeplearning4J | Java/Scala |
Leaf | AutumnAI | Rust |
Lasagne | Lasagne | python |
Neon | NervanaSystems | python |
(三)机器学习书和推荐:
python数据分析与数据挖掘、机器学习系统设计、机器学习、面向机器智能TensorFlow实践、TensorFlow
(四)课程概要:
七大块:①特征工程;②模型、策略、优化;③分类、回归和聚类;④TensorFlow;⑤神经网络;⑥图像识别;⑦自然语言处理
二、机器学习概述
(机器学习概述、数据集的结构、数据的特征工程、(数据降维)、数据的类型、机器学习算法基础)
(一)机器学习概述
1、什么是机器学习
机器学习是从数据中自动获取规律(模型),并利用规律对未知数据进行预测;
例如:AlphaGo、广告搜索
2、为什么需要机器学习
①解放生产力:智能客服等;
②解决专业问题:辅助医生看病等;
③提供社会便利:杭州的城市大脑等;
目的:
在各个领域内带来价值,用自动代替手动,减少企业的成本也提高企业的效率。
领域:医疗、航空、教育、物流、电商...
(二)数据集的构成
一般存在文件csv
不用MySQL(缺点):性能瓶颈、读取速度;格式不太符合机器学习要求数据的格式;
pandas:读取工具
numpy:GIL(真正的多线程,释放了GIL线程锁)
1、可用数据集:
(1)kaggle
网址:https://www.kaggle.com/datasets;
特点: ①大数据竞赛平台; ②80万科学家; ③真实数据; ④数据量大;
(2)UCI
网址:https://archive.ics.uci.edu/ml/
特点:①收录了360个数据集;②覆盖科学、经济、生活等领域;③数据量几十万
(3)scikit-learn
网址:https://scikitlearn.org/stable/datasets/index.html#datasets
特点:①数据量较小;②方便学习
2、数据集的组成:
结构:特征值+目标值
如:
样本 | 房子面积 | 房子位置 | 房子楼层 | 房子朝向 | 目标值 |
---|
数据1 | 80 | 9 | 3 | 0 | 80 |
数据2 | 100 | 9 | 5 | 1 | 120 |
数据3 | 80 | 10 | 3 | 0 | 100 |
注:有些数据可以没有目标值
3、数据集中对特征值的处理:
pandas:dataframe格式的;缺失值、数据转换等;
scikitlearn:对特征进行处理;
(三)数据的特征工程
1、特征工程是什么
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性;
实质就是提高预测效果
2、特征工程的意义:直接影响预测结果
3、scikitlearn工具介绍:
安装命令:pip install Scikit-learn
(检查是否安装成功:import sklearn)
注:安装scikit-learn需要安装pandas、numpy等库。
sklearn包含的算法有:Classification(分类)、Regression(回归)、Clustering(聚类)、Dimensionality redution(降维)、Model selection(模型选择) 、Preprocessing(特征工程)
4、数据的特征抽取
特征抽取就是对文本等数据(有字典、文本)进行特征值化(转换为数字值);
(1)字典特征抽取
1> 作用:对字典数据进行特征值化
2> 类:sklearn.feature_extraction.DictVectorizer
3> 语法:
-
DictVectorizer(sparse=True,...)
-
-
-
-
4> 流程:
①实例化DictVectorizer;
②调用fit_transform方法输入数据并转换
例:
-
-
from sklearn.feature_extraction import DictVectorizer
-
-
-
-
dict = DictVectorizer(sparse=False)
-
-
data = dict.fit_transform([{'city': '北京', 'temperature': 100},
-
{'city': '上海', 'temperature': 60},
-
{'city': '深圳', 'temperature': 30}])
-
print(dict.get_feature_names())
-
-
-
-
-
-
-
-
-
-
-
-
-
-
字典数据抽取:把字典中一些类别数据分别转换成特征,数字不进行转换,“上海”“北京”等转换成0、1;
注:数组形式,有类别的这些特征先要转换为字典数据
(2)文本特征提取
1> 作用:对文本数据进行特征化
2> 类:sklearn.feature_extraction.text.CountVectorizer
3> 语法:
-
CountVectorizer(), 返回词频矩阵
-
-
-
4> 对英文进行特征化的流程:
(中文需要先分词,详见5>)
①实例化类:CountVectorizer
②调用fit_transform方法输入数据并转换
(注:返回格式利用toarray()进行sparse矩阵转换为array数组)
-
from sklearn.feature_extraction.text import CountVectorizer
-
-
-
data = cv.fit_transform(['life is short,i like python', 'life is too long,i dislike python'])
-
data = cv.fit_transform(['life is short,i like python', 'life is too long,i dislike python'])
-
-
print(cv.get_feature_names())
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
5> 对中文进行特征化的流程:
①对准备好的句子利用结巴进行分词;
②实例化CountVectorizer;
③将分词结果变成字符串当做fit_transform的输入值;
例:
-
-
-
-
-
con1 = jieba.cut('今天很残酷,明天更残酷,后天很美好,但绝大部分是死在明天晚上,所以每个人不要放弃今天。')
-
con2 = jieba.cut('我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。')
-
con3 = jieba.cut('如果只用一种事物了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
data = cv.fit_transform([c1,c2,c3])
-
-
print(cv.get_feature_names())
-
-
6> 用途
count:文本分类、情感分析
补:☆ TF-IDF ☆
文本分类的另一种方式:tf idf(tf:term frequency; idf: 逆文档频率inverse document frequency log(总文档数量/该词出现的文档数量))
tf * idf为这个词在文章中的重要程度
主要思想:如果一个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或短语具有很好的类别区分能力,适合用来分类。
作用:用于评估一个字词对于一个文件或一个语料库中的其中一份文件的重要程度。
类:sklearn.feature_extraction.text.TfidVectorizer
例:
-
-
from sklearn.feature_extraction.text import TfidfVectorizer
-
-
-
-
-
data = tf.fit_transform([c1,c2,c3])
-
-
print(tf.get_feature_names())
-
-
-
为什么需要TfidVectorizer?
它是分类及其学习算法的重要依据;在情感分析中也非常重要
5、特征的预处理:对数据进行处理
(特征处理的方法、sklearn特征处理API)
1> 什么是特征处理
通过特定的统计方法(数学方法)将数据转换成算法要求的数据
对于数值型数据:标准缩放:①归一化;②标准化;③缺失值
对于类别型数据:one-hot编码
对于时间类型数据:时间的切分
2> sklearn特征预处理API:sklearn.preprocessing
①归一化
i、特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
ii、公式:x'=(x-min)/(max-min), x''=x'*(mx-mi)+mi
(注:作用于每一列,max为一列的最大值,min为一列的最小值,x''为最终结果,mx, mi分别为指定区间值默认mx为1,mi为0)
iii、sklearn归一化API:sklearn.preprocessing.MinMaxScaler
iv、MinMaxScaler语法:
-
MinMaxScaler(feature_range=(0,1)...)
-
-
v、归一化步骤及实例
步骤:实例化MinMaxScaler----->通过fit_transform转换
例:
-
from sklearn.preprocessing import MinMaxScaler
-
-
mm = MinMaxScaler(feature_range=(2,5))
-
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
-
-
-
-
-
-
vi、为什么进行归一化处理
消除量纲,把所有数据转换到同一标准下,使得一个特征对最终结果不会造成更大影响。如:(72993-35948)^2+(10.14-6.8)^2+(1.0-1.21)^2中由于第一项值太大,后两项结果可以忽略不计,所以需要进行归一化处理。
问题:如果数据中异常点较多,会有什么影响?
答:会影响最大值最小值,从而进一步影响归一化的处理。
vii、归一化总结
(归一化的缺点是受异常值的影响)所以只适用于传统精确小数据场景
②标准化
i、特点:通过对原始数据进行变换把数据变换到均值为9,方差为1范围内
ii、公式:x'=(x-mean)/sigama
iii、sklearn标准化API:sklearn.preprocessing.StandardScaler
iv、StandardScaler语法:
-
-
-
StandardScaler.fit_transfrom(x)
-
-
v、标准化流程和实例
流程: ①实例化StandScaler
②通过fit_transfrom转换
例:
-
from sklearn.preprocessing import StandardScaler
-
-
-
-
data = std.fit_transform([[1,-1,3],[2,4,2],[4,6,-1]])
-
-
-
-
-
-
-
-
vi、标准化总结
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
③缺失值
如何处理数据中的缺失值?
答:常用的方法有:i、删除;ii、插补:按每行或每列的均值或中位数填补。
i、sklearn缺失值API:Imputer
ii、Imputer语法
-
Imputer(missing_values='NaN',strategy='mean',axis=0)
-
-
-
-
(四)数据降维(减少特征的数量)
常用的方法有两种:特征选择、主成分分析
1、特征选择
特征选择的原因:
冗余:部分特征的相关度高,容易消耗计算性能
噪声:部分特征对预测结果有影响
1> 特征选择是什么
特征选择就是单纯的从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值或不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
主要方法(三大武器):
Filter(过滤式):Variance Threshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)
2> sklearn特征选择API:sklearn.feature_selection.VarianceThreshold
VarianceThreshold语法:
-
VarianceThreshold(threshold=0.0)
-
Variance.fit_transfrom(x)
-
VarianceThreshold流程:
①初始化VarianceThreshold,指定阈值方差
②调用fit_transfrom
例:
-
from sklearn.feature_selection import VarianceThreshold
-
-
x = [[0,2,0,3],[0,1,4,3],[0,1,1,3]]
-
selector = VarianceThreshold(threshold=0)
-
data = selector.fit_transfrom(x)
-
-
-
-
-
3> 其他特征选择方法: 神经网络
2、主成分分析(PCA)
1> API:sklearn.decomposition
2> 目的:尽可能损失少量数据信息的情况下,降低数据维度
3> 什么时候用主成分分析法
特征数量达到上百的时候,就要考虑数据的简化问题,数据也会去改变
4> 作用:削减聚类分析或回归分析中特征的数量
5> 语法
-
-
-
例:
-
from sklearn.decomposition import PCA
-
-
-
pca = PCA(n_components=0.9)
-
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
-
-
-
-
-
[ 5.74456265e+00 -1.91485422e+00]
-
[-5.74456265e+00 -1.91485422e+00]]
例1:instacart-market-basket-analysis-kaggle
探究:用户对物品类别的喜好细分降维
数据:products.csv(商品信息)、order_products_prior.csv(订单与商品信息)、orders.csv(用户的订单信息)、asile.csv(商品所属具体物品分类)
分析:
①先把有用的特征从各个表中提取出来并放在一张表内[pd.merge()];
prior:product_id, order_id
products:product_id, aisle_id
orders: order_id, user_id
aisles: aisle_id, aisle
-
-
from sklearn.decomposition import PCA
-
-
prior = pd.read_csv('E:/python/传智播客黑马18年人工智能课程/数据文档/instacart-market-basket-analysis-kaggle/order_products__prior.csv')
-
products = pd.read_csv('E:/python/传智播客黑马18年人工智能课程/数据文档/instacart-market-basket-analysis-kaggle/products.csv')
-
orders = pd.read_csv('E:/python/传智播客黑马18年人工智能课程/数据文档/instacart-market-basket-analysis-kaggle/orders.csv')
-
aisle = pd.read_csv('E:/python/传智播客黑马18年人工智能课程/数据文档/instacart-market-basket-analysis-kaggle/aisles.csv')
-
-
_mg = pd.merge(prior,products,on=['product_id','product_id'])
-
_mg = pd.merge(_mg,orders,on=['order_id','order_id'])
-
mt = pd.read_csv(_mg,aisle,on=['aisle_id','aisle_id'])
-
②建立一个类似行、列数据——交叉表(特殊的分组表)
-
_mg = pd.merge(prior, products, on=['product_id', 'product_id'])
-
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
-
mt = pd.read_csv(_mg, aisle, on=['aisle_id', 'aisle_id'])
-
-
-
cross = pd.crosstab(mt['user_id'],mt['aisle'])
-
-
-
pca = PCA(n_components=0.9)
-
data = pca.fit_transfrom(cross)
-
-
注:本文非原创,摘录于传智机器学习视频,仅供个人学习使用,如有侵权,请及时联系删帖。
---------------------
作者:xiaotian127
来源:CSDN
原文:https://blog.csdn.net/xiaotian127/article/details/86756402#comments
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)