学习框架
01-人工智能概述
- 机器学习、人工智能与深度学习的关系
达特茅斯会议-人工智能的起点
机器学习是人工智能的一个实现途径
深度学习是机器学习的一个方法发展而来(人工神经网络)
从图上可以看出,人工智能最开始是用于实现人机对弈,到后面的开始处理垃圾邮件过滤【机器学习,机器去模仿人工神经网络】,到最后的图片识别效果显著【深度神经网络,在图像识别中取得好的成绩】,也就是人工智能发展的3个历程。
- 机器学习、深度学习的应用
传统预测: 店铺销量预测,移动用户流量消费预测,
图像识别: 人脸识别、无人驾驶
自然语言处理: 英文翻译、文本分类、感情分析、只能客服
02-机器学习
- 什么是机器学习
机器学习就是从数据中自动分析获得模型,并利用模型对未知的数据进行预测
大量的数量 –》 发布预测模型 --》 结果预测
例如,我们将大量的猫图片,利用Py转换为二进制的文件,然后交给机器去学习,去发现一定的规律后,下次机器就可以在大量的图片中发现包含猫的图片。
- 数据集的构成: 特征值 + 目前值
说明:有些数据我们没有目标值,但是也是可以根据他们的特征进行归类(有专门的算法)
03-机器学习算法分类
根据我们机器学习的结果有无目标值分为监督学习和无监督学习。
监督学习根据输入的数据特征分为分类学习和回归学习
监督学习:
目标值:类别 - 分类问题(猫狗的识别)
k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归
目标值:连续型的数据 - 回归问题(房屋价格预测,看做曲线)
线性回归、岭回归无监督学习:
目标值:无 - 无监督学习
聚类 k-means生活案例:
1、预测明天的气温是多少度? 回归
2、预测明天是阴、晴还是雨? 分类
3、人脸年龄预测? 可回归/可分类
4、人脸识别? 分类
04-机器学习开发流程
机器学习开发流程:
1)获取数据(数据量越大,数据越精确)
2)数据处理(对不符合要求的数据进行剔除,对不完整的数据进行数据完整)
3)特征工程(把数据处理成符合我们具有特征值的数据)
4)机器学习算法训练 –》 产生模型
5)模型评估(用一系列的方法对产生的模型进行评估,如果符合要求,则继续,否则轮训继续进行数据处理和特征工程)
6)应用(用模型对未知的数据进行预测)
05-学习框架介绍
学习框架和资料介绍:
1)算法是核心,数据与计算是基础【很消耗计算性能,需要能支持它计算的硬件设备,CPU和GPU等】
2)我们做的都是基于专业的算法工程师的基础上进行数据分析、业务分析、常见算法的整合以及结合特征工程进行参数的调优、优化
3) 实战类书籍推荐:
机器学习 -”西瓜书”- 周志华
统计学习方法 - 李航
深度学习 - “花书”
4)开源框架:
06-可用数据集
我们的数据集分为训练集和测试集合,机器学习主要用到了sklearn,下面介绍sklearn数据集
- 可用数据集
互联网公司内部接口: 借用百度
学习阶段可以用的数据集:
1)sklearn
2)kaggle(数据挖掘)
3)UCI(加州大学的一个研究机构)
UCI数据集:https://archive.ics.uci.edu/ml/datasets/Iris
- Scikit-learn工具介绍
- Scikit-Learn安装
# 会帮助我们去安装一下中间的插件,例如Numpy, Scipy等库
pip3 install Scikit-learn
- Scikit-learn包含的内容
- sklearn数据集API的使用
load_* 获取小规模数据集,例如后面的鸢尾花, iris = load_iris()
fetch_* 获取大规模数据集
sklearn小数据集(鸢尾花案例)
sklearn.datasets.load_iris()
sklearn大数据集
sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
数据集的返回值
datasets.base.Bunch(继承自字典)
dict["key"] = values
bunch.key = values # 可以根据.属性的方式 获取values值
# 例子1:简单使用 from sklearn.datasets import load_iris import json def datasets_demo(): ''' datasets数据集的使用 :return: ''' iris = load_iris() print(type(iris.data)) # print("鸢尾花全部数据集:", iris) # 返回值是一个bunch类型 print('查看数据集目标值(利用字典形式)',iris['target_names'])# # 查看数据集目标值(字典形式) ['setosa' 'versicolor' 'virginica'] print('查收数据集描述信息(利用bunch形式)', iris.DESCR) ''' =============查收数据集(利用bunch形式) **Data Set Characteristics:** :Number of Instances: 150 (50 in each of three classes) :Number of Attributes: 4 numeric, predictive attributes and the class :Attribute Information: # 花的属性信息 - sepal length in cm - sepal width in cm - petal length in cm - petal width in cm - class: # 目标值,也就是对鸢尾花进行分类 - Iris-Setosa - Iris-Versicolour - Iris-Virginica :Summary Statistics: # 鸢尾花的信息统计 ============== ==== ==== ======= ===== ==================== Min Max Mean SD Class Correlation(相关系数) ============== ==== ==== ======= ===== ==================== sepal length: 4.3 7.9 5.84 0.83 0.7826 sepal 2.0 4.4 3.05 0.43 -0.4194 petal length: 1.0 6.9 3.76 1.76 0.9490 (high!) petal 0.1 2.5 1.20 0.76 0.9565 (high!) ============== ==== ==== ======= ===== ==================== :Missing Attribute Values: None :Class Distribution: 33.3% for each of 3 classes. :Creator: R.A. Fisher :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov) :Date: July, 1988 ''' print("鸢尾花标本:", iris.data) # 返回时一个ndarray类型,属于numpy类,二维数组 ''' 鸢尾花标本: [[5.1 3.5 1.4 0.2] [4.9 3. 1.4 0.2] [4.7 3.2 1.3 0.2] [4.6 3.1 1.5 0.2]] ''' print("查看样本数量:", iris.data.shape) # iris.data是一个numpy.ndarray类型;.shape可以直接看到几行几列 # 查看样本数量: (150, 4) ==》 150个样本,每个样本有4个特征值 return None if __name__ =='__main__': datasets_demo()
说明:我们获取到的数据不能全部用于训练数据,因为有一部分的数据是需要用来进行对训练出来的模型进行模型评估的。
- 数据集的划分
- sklearn中数据集划分API的使用
sklearn.model_selection.train_test_split(arrays, *option)参数:x: 特征值【必须】y: 目标值【必须】test_size: 测试集的大小,一般为浮点数,例如0.2,默认0.25【可选】random_state: 划分数据集的时候,是随机划分的,借助一个随机数种子产生随机,不同的随机数种子产生的结果是不一样的【可选】返回值:x_train, x_test, y_train, y_test训练集特征值、测试集特征值、训练集目标值、测试集目标值
完整版Demo
from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris def datasets_demo(): iris = load_iris() print('查看数据集目标值(利用字典形式)',iris['target_names'])# print('查收数据集描述信息(利用bunch形式)', iris.DESCR) print("鸢尾花标本:", iris.data) # 返回时一个ndarray类型,属于numpy类,二维数组 print("查看特征值:", iris.data) # iris.data是一个numpy.ndarray类型;.shape可以直接看到几行几列,共计150,4 # 数据集划分 x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=2019) print('训练集的特征值x_train', x_train) print('训练集的特征值x_train有多少行多少列', x_train.shape) # (120,4) 即150*0.8 print('测试集的特征值x_test', x_test) return None if __name__ =='__main__': datasets_demo()