目录
1、机器学习概述
1.1 人工智能概述
1.1.2 机器学习、深度学习能做些什么
1.2 什么是机器学习
1.2.1 定义
1.2.3 数据集构成
1.3 机器学习算法分类
1.4 机器学习开发流程
1.5 学习框架和资料介绍
1.5.1 机器学习库与框架
2、特征工程
2.1 数据集
2.1.1 可用数据集
2.1.2 sklearn数据集
2.1.3 数据集的划分
2.2 特征工程介绍
2.2.1 为什么需要特征工程(Feature Engineering)
2.2.2 什么是特征工程
2.2.3 特征工程的位置与数据处理的比较
2.3 特征抽取/特征提取/特征值化
2.3.1 为什么要特征提取?什么是特征提取?
2.3.2 字典特征提取
2.3.3 文本特征提取
2.4 特征预处理
2.4.1 为什么要进行归一化/标准化?
2.4.2 归一化
2.4.3 标准化
2.5 特征降维
2.5.1 降维
2.5.2 降维的两种方式
2.5.3 什么是特征选择
2.5.4 主成分分析(PCA)
3、分类算法
3.2 K-近邻
3.3 模型选择与调优
3.3.1 交叉验证
3.3.2 超参数搜索-网格搜索
3.4 朴素贝叶斯算法
3.4.3 联合概率、条件概率与相互独立
3.4.7 朴素贝叶斯算法总结
3.5 决策树
3.6 集成学习方法之随机森林
3.6.1 集成学习方法
3.6.2 随机森林
4、回归与聚类算法
4.1 线性回归
4.1.2 线性回归的损失和优化原理
4.2 欠拟合与过拟合
4.3 岭回归(带L2正则化的线性回归)
4.4 分类算法——逻辑回归与二分类
4.5 模型保存和加载
4.6 无监督学习-K-means算法
4.6.1 原理
4.6.6 如何去评估聚类的效果——Kmeans性能评估指标
机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测
从历史数据中获得规律?这些历史数据是怎样的格式?
注:
学习目标:
学习目标:
1 scikit-learn数据集API介绍
2 数据集的返回值
1 数据集划分API
def train_test_split(*arrays,
test_size=None,
train_size=None,
random_state=None,
shuffle=True,
stratify=None):
"""Split arrays or matrices into random train and test subsets子集合
Quick utility that wraps input validation and
``next(ShuffleSplit().split(X, y))`` and application to input data
into a single call for splitting (and optionally subsampling) data in a
oneliner.
Read more in the :ref:`User Guide `.
Parameters
----------
*arrays : sequence of indexables with same length / shape[0]
Allowed inputs are lists, numpy arrays, scipy-sparse
matrices or pandas dataframes.
test_size : float or int, default=None
If float, should be between 0.0 and 1.0 and represent the proportion
of the dataset to include in the test split. If int, represents the
absolute number of test samples. If None, the value is set to the
complement of the train size. If ``train_size`` is also None, it will
be set to 0.25.
train_size : float or int, default=None
If float, should be between 0.0 and 1.0 and represent the
proportion of the dataset to include in the train split. If
int, represents the absolute number of train samples. If None,
the value is automatically set to the complement of the test size.
random_state : int, RandomState instance or None, default=None
Controls the shuffling applied to the data before applying the split.
Pass an int for reproducible output across multiple function calls.
See :term:`Glossary `.
shuffle : bool, default=True
Whether or not to shuffle the data before splitting. If shuffle=False
then stratify must be None.
stratify : array-like, default=None
If not None, data is split in a stratified fashion, using this as
the class labels.
Read more in the :ref:`User Guide `.
Returns
-------
splitting : list, length=2 * len(arrays)
List containing train-test split of inputs.
.. versionadded:: 0.16
If the input is sparse, the output will be a
``scipy.sparse.csr_matrix``. Else, output type is the same as the
input type.
Examples
--------
>>> import numpy as np
>>> from sklearn.model_selection import train_test_split
>>> X, y = np.arange(10).reshape((5, 2)), range(5)
>>> X
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> list(y)
[0, 1, 2, 3, 4]
>>> X_train, X_test, y_train, y_test = train_test_split(
... X, y, test_size=0.33, random_state=42)
...
>>> X_train
array([[4, 5],
[0, 1],
[6, 7]])
>>> y_train
[2, 0, 3]
>>> X_test
array([[2, 3],
[8, 9]])
>>> y_test
[1, 4]
>>> train_test_split(y, shuffle=False)
[[0, 1, 2], [3, 4]]
"""
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# sklearn数据集使用
def datasets_demo():
'''
sklearn数据集使用
# 获取数据集
'''
# 获取小数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n",iris) #返回值是一个继承自字典的bunch
print("查看数据集描述(鸢尾花的描述):\n",iris["DESCR"]) # iris.DESCR也可以
print("查看特征值:\n", iris.data, iris.data.shape)
print("查看特征值的名字(鸢尾花特征的名字):\n",iris.feature_names)
print("鸢尾花的目标值:\n",iris.target)
print("鸢尾花的目标值的名字:\n", iris.target_names)
# 获取大数据集 subset:train test all 可选,选择要加载的数据集
# 训练集的“训练”,测试集的“测试“,两者的”全部“
#sklearn.datasets.fetch_20newsgroups(data_home=None,subset='train')
# 数据集划分(特征值,目标值,测试集的范围默认25%,随机数种子)
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=10)
print("训练集的特征值:\n",x_train,x_train.shape)
print("测试集的特征值:\n", x_test, x_test.shape)
print("训练集的目标值:\n", y_train, y_train.shape)
print("测试集的目标值:\n", y_test, y_test.shape)
return None
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。会直接影响机器学习的效果。
pandas:一个数据读取非常方便以及基本的处理格式的工具。用于数据清洗、数据处理
sklearn:对特征的处理提供了强大的接口。用于特征工程
学习目标:
1 用机器学习算法对数据集进行学习,机器学习算法实际上一些统计方法(数学公式),是不能处理字符串、文本、图像的,需要转换为可用于机器学习的数字特征
2 特征提取API
The sklearn.feature_extraction
module deals with feature extraction from raw data. It currently includes methods to extract features from text and images.
作用:对字典数据进行特征值化
1 API
class sklearn.feature_extraction.
DictVectorizer
(*, dtype=
OneHotEncoder
来完成二进制 one-hot 编码。from sklearn.feature_extraction import DictVectorizer
def dict_demo():
'''
字典特征抽取
:return:
'''
data = [{'city':'北京','temperature':100},{'city':'上海','temperature':70},{'city':'深圳','temperature':60}]
# 1、实例化一个转换器类(是否用稀疏矩阵表示
transfer = DictVectorizer(sparse=False)
# 2、调用fit_transform()方法
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)
print("feature name:\n",transfer.get_feature_names())
2 应用场景:
作用:对文本数据进行特征值化
1 API 文本特征抽取:CountVecotrizer统计每个样本特征词出现的次数
class sklearn.feature_extraction.text.
CountVectorizer
(*, input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None停用词, token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=
英文
from sklearn.feature_extraction.text import CountVectorizer
def count_demo():
"""
文本特征抽取:CountVecotrizer统计每个样本特征词出现的次数
"""
data = ["life is short, I like python","life is too long, i dislike python"]
# 1、实例化一个转换器类
transfer = CountVectorizer(stop_words=["is","too"])
# 2、调用fit_transform,用toarray()来显示二维数组
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new.toarray())
print("feature_name:\n",transfer.get_feature_names())
return None
中文
def count_chinese_demo():
"""
文本特征抽取:CountVecotrizer统计每个样本特征词出现的次数
不手动空格的话,需要jieba分词先处理才能得到单词
"""
data = ["五星红旗 我 为你 骄傲","五星红旗 我 为你 自豪"]
# 1、实例化一个转换器类
transfer = CountVectorizer()
# 2、调用fit_transform,用toarray()来显示数组
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new.toarray())
print("feature_name:\n",transfer.get_feature_names())
return None
中文jieba分词
import jieba
def count_chinese_demo2():
'''
中文文本特征抽取,自动分词
:return:
'''
data = ["吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮",
"若要不吃葡萄非吐皮,就得先吃葡萄不吐皮",
"青葡萄,紫葡萄,青葡萄没紫葡萄紫"]
data_new = []
for sent in data:
# list()强转为列表形式
# “ ”.join()强转为字符串格式,其中空格是分词符号
data_new.append(" ".join(jieba.cut(sent)))
# 实例化一个转换器类
transfer = CountVectorizer()
# 调用fit_transform
data_final = transfer.fit_transform(data_new)
print(type(data_final))
print("data:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
2 API tfidf的方法进行文本特征抽取,关键词:在某个类别的文章中,出现的次数很多,但是在其他类别中
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据
1 包含内容
2 特征预处理API
The sklearn.preprocessing
module includes scaling, centering, normalization, binarization methods.缩放、居中、归一化、二值化
特征的单位或者大小相差较大,或者某特征的方差相比其他特征大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其他特征。特征具有相近的尺度,可以帮助梯度下降算法更快的收敛
1 定义:通过对原始数据进行变换把数据映射到(默认[0,1])之间
2 公式:根据最值求得,容易受异常值的影响,鲁棒性较差,只适合传统精确小数据场景。
1 定义:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
2 公式:由于具有一定的数据量,少量异常点对平均值和标准差的影响并不大,所以比较稳定
3 总结:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
维数:数组嵌套的层数
0维:标量
1维:向量
2维:矩阵
因为进行训练的时候,是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,可能会出现数据冗余,对算法预测影响较大
1 定义:数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征
2 方法:
3 过滤式
3.1 低方差特征过滤:删除一些低方差特征(特征大多样本的值比较相近)
class sklearn.feature_selection.
VarianceThreshold
(threshold=0.0)
3.2 相关系数:反映变量之间相关关系密切程度的统计指标
scipy.stats.
pearsonr
( x , y )
特征之间相关性较高:
定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息
PCA技术对数据进行降维处理,可以进行重要性排序,根据需要取前面最重要的部分,同时最大程度保持了原有数据的信息。PCA技术完全无参数限制,计算过程中不需要认为设定参数或根据经验模型对计算进行干预,最后的结果只与数据相关。但是如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。
应用:回归分析、聚类分析
定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别
应用场景:少量数据
将拿到的训练数据分为训练和验证集。
通常情况下,有很多参数需要手动指定(如KNN中的K值),手动过程繁杂,所以需要对模型预设集中超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。
如何高效的进行决策?特征的先后顺序很重要
1 决策树的划分依据之一——信息增益(知道某个特征后,不确定性的减少程度)
集成学习通过建立几个模型组合来解决单一预测问题。工作原理是生成多个分类器/模型,各自独立的学习和做出预测。这些预测最后结合成组合预测,因此优于任何一个单分类做出的预测。
解决高方差/过拟合 | 解决高偏差/欠拟合 |
获得更多的训练实例 | 尝试增加多项式特征 |
尝试减少特征数量 | 尝试获得更多的特征 |
尝试增加正则化程度λ | 尝试减少正则化程度λ |
L2正则化:损失函数+λ惩罚项,削弱某个特征的影响,参数越小(惩罚项系数=正则化力度)说明模型越简单越不容易产生过拟合
训练好或计算好一个模型之后,主要是保存算法参数
1 轮廓系数
2 总结