1.机器学习概述
1.1人工智能概述
1.1.1机器学习与人工智能、深度学习的关系
- 机器学习是人工智能的实现途径
- 深度学习是机器学习的一个方法发展而来的
1.1.2 机器学习深度学习的应用场景
- 传统预测
- 图像识别
- 自然语言处理
1.2什么是机器学习
1.2.1 定义
- 机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测
1.2.2 数据集的构成
- 特征值+目标值(比如说房屋的特征是特征值,房屋的价格是目标值)
- 对于每一行数据可以称为样本,有些数据集可以没有目标值
1.3 机器学习算法分类
- 监督学习:输入数据是由输入特征值和目标值所组成,函数的输出可以是一个连续的值(称为回归),或者是有限个离散的值(称为分类)
- 分类问题:比如根据图片识别猫和狗,k-邻近算法、贝叶斯分类、决策树与随机森林、逻辑回归
- 回归问题:连续型数据,比如根据房子的特征预测房价,线性回归、岭回归
- 无监督学习:输入数据有特征无标签,即没有标准答案,比如根据人的特征给人进行分类
- 聚类:k-means
1.4机器学习的开发流程
- 获取数据
- 数据处理
- 特征工程
- 机器学习算法进行训练-得到模型
- 模型评估
- 应用
1.5 学习框架和资料
- 高数、线代、概率论
- 框架 sklearn pytouch tenserflow
- 书籍资料
- 机器学习西瓜书-周志华
- 统计学习方法-李航
- 深度学习花书
2.特征工程
2.1数据集
2.1.1 可用数据集
- UCI
- sklearn(python的一个库,有文档)
- kaggle
2.1.2sklearn数据集
-
datasets.load_* ()
获取小规模数据集,数据包含在datasets
-
datasets.fetch_* (data_home=None,subset=’’)
获取大规模数据集,需要重网络下载
函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/,要修改默认目录,可以修改环境变量SCIKIT_LEARN_DATA
第二个参数可以选择 ‘train’ ‘all’ ‘test’ 分别表示训练集 测试机 和两者
-
返回值都为datesets.base.Bunch()继承自字典
本质上是一个 dict,它的键值对可用通过对象的属性方式访问。主要包含以下属性:
-
data:特征数据数组,是 n_samples * n_features 的二维 numpy.ndarray 数组
-
target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
-
DESCR:数据描述
-
feature_names:特征名
-
target_names:标签名
from sklearn.datasets import load_iris def dataset_demo(): # 获取数据集 iris = load_iris() print("鸢尾花数据集\n", iris) print("查看数据集描述\n",iris["DESCR"]) print("查看特征值的名字\n",iris['feature_names']) print("查看特征值\n",iris.data,iris.data.shape) return None if __name__ == "__main__": dataset_demo()
-
2.1.3 数据集划分
机器学习的数据一般分为两个部分
* 训练数据:用于训练,构建模型 70%~80%
* 测试数据:在模型检测时使用,用于评估模型是否有效 20%~30%
最常用的是train_test_split()函数,用来随机划分样本数据为训练集和测试集。
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size = 0.3, random_state = 7)
-
data:待划分样本数据,特征值
-
label:待划分样本数据的标签,目标值
-
test_size:测试数据占样本数据的比例,若整数则是测试数据数量
-
random_state: 设置随机数种子,保证每次都是同一个随机数。如果为0或者不填,则每次得到数据都不一样。
-
返回值的顺序依次是训练集特征值,测试集特征值,训练集目标值,测试机目标值
鸢尾花数据集
https://blog.youkuaiyun.com/Albert201605/article/details/82313139
* data*{ndarray, dataframe} of shape (150, 4)*
The data matrix. If `as_frame=True`, `data` will be a pandas DataFrame. 属性数据,一个二维数组,对应多行特征值(属性值),对应鸢尾花的四个属性的数据集,其实就是取整个表的前四列
* target: {ndarray, Series} of shape (150,)
the classification target. If `as_frame=True`, `target` will be a pandas Series. 种类数据或者说目标数据,对应鸢尾花的种类的数据集
* feature_names: list
四个属性,分别是Sepal.Length(花萼长度),单位是cm;Sepal.Width(花萼宽度),单位是cm;Petal.Length(花瓣长度),单位是cm;Petal.Width(花瓣宽度),单位是cm;
* target_names: list
三个种类,分别是Iris Setosa(山鸢尾);Iris Versicolour(杂色鸢尾);Iris Virginica(维吉尼亚鸢尾)。
* **frame: DataFrame of shape (150, 5)**
Only present when `as_frame=True`. DataFrame with `data` and `target`.
* DESCR: str
The full description of the dataset.描述
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
def dataset_demo():
# 获取数据集
iris = load_iris()
print("鸢尾花数据集标签\n", iris.target)
#鸢尾花共有4个属性,分别是花萼的长、花萼的宽、花瓣的长和花瓣的宽,分别是sepal length sepal width,petal length,petal width
print("查看数据集描述\n", iris["DESCR"])
# ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
print("查看特征值的名字\n", iris['feature_names'])
print("查看特征值\n", iris.data, iris.data.shape)
# 数据集划分成训练集和测试集
print("训练集特征值:")
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
print(x_train,x_train.shape)
return None
if __name__ == "__main__":
dataset_demo()
2.2 特征工程
2.2.1 什么是特征工程
特征工程是使用专业背景指示和技巧处理数据,使得特征集在机器学习算法上发挥更好的作用的过程(会影响机器学习的效果)
2.2.2 特征工程的内容
特征抽取,特征预处理,特征降维
2.3特征抽取
2.3.1 概念
特征提取是将任意数据比如文本或图像转换为可用于机器学习的数字特征
-
字典特征提取
-
文本特征提取
-
图像特征提取
# 采用api sklearn.feature_extraction
2.3.2字典特征提取
- 作用:对字典数据进行特征值化,比如三个类别就分别用001,010,100来表示,然后如果传进去的参数为ture,那就是用稀疏矩阵表示
sklearn.feature_extraction import DictVectorizer(sparse=True,....) sparse -- 稀疏
from sklearn.feature_extraction import DictVectorizer
def dict_demo():
data = [{
'city': '北京', 'temperature': 100},{
'city': '上海', 'temperature': 60},{
'city': '深圳', 'temperature': 30}]
#1、实例化一个转换器类,不转化为稀疏矩阵
transfer = DictVectorizer(sparse=False)
#把数据保存在data_new中
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
print("特征名字:\n", transfer.