机器学习概述
1.1能做什么
传统预测
图像识别
自然语言处理
1.2机器学习定义
数据
模型
预测
从历史数据中获得规律
1.2.3 数据集构成
特征值 + 目标值
1.3机器学习算法分类
监督学习
目标值:类别-分类问题
k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归
目标值:连续-回归问题
线性回归、岭回归
无监督学习
目标值:无-聚类、k-means
1.4机器学习开发流程
获取数据
数据处理
特征工程
机器学习算法训练-模型
模型评估
应用
1.5学习框架和资料介绍
算法是核心,数据与计算是基础
实战类书籍
机器学习-周志华/统计学习方法-李航
深度学习-花书
机器学习库和框架
特征工程
2.1数据集
2.1.1可用数据集
公司内部 爬虫 数据接口 监控等 / 学习使用:sklearn kaggle uci scikit-learn 天池
sklearn数据集
load_* 加载数据集(本地数据集)
fetch_* 获取数据集(网络下载,下载的目录是 ~/scikit_learn_data/)
数据集的划分:
训练数据:用于训练,构建模型
测试数据:检验模型,评估模型
测试集:0.2-0.3
训练集特征值,测试集特征值,训练集目标值,测试集目标值
2.2特征工程介绍
算法 特征工程
1为什么需要特征工程(feature engineering)
2什么是特征工程
sklearn 特征工程
pandas 数据清洗、数据处理
特征工程步骤:
1特征抽取
机器学习算法-统计方法-数学公式
数据需要转换成数学能理解的值-特征值化(转化为数字特征)
字典特征提取(特征离散化)
文本特征提取
图像特征提取
举例:文本类型-》数值;类别-》数值
字典特征提取
sklearn.feature_extraction
sklearn.feature_extraction.DictVectorize()
父类:转换器类
返回sparse矩阵(稀疏矩阵,0值很多,且分布没有规律)
将非零值 按位置表示出来[节省内存,提高加载效率]
应用场景:pclass,sex
文本特征提取
单词作为特征
1 sklearn.feature_extraction.text.CountVectorizer(stop_word=[])
返回词频矩阵
countvectorizer:计算单次频率
stop_words:停用词(排除对分类用处小的)
2 TfidfVectorizer:某类问题专属单词 语料库(corpus)
TF(Term Frequenc)词频: 某个词在文章中的出现次数 / 文章总词数
IDF(Inverse Document Frequency)逆文档频率 =log(语料库的文档总数/包含该词的文档总数+1)
TF-IDF = 词频(TF) * 逆文档频率(IDF)
特征预处理(sklearn.preprocessing API)
归一化和标准化(无量纲化):为了调和不同数量级对特征学习的影响,将数据调整到同一规格
归一化:将数据映射到[0,1]间
公式:X'=(x-min)/(max-min) x''=x' * (mx-mi) + mi 注:mx,mi为区间最大最小值
调用归一化:sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
缺点:异常值很多时难以处理-->鲁棒性较差,只适合精确小数据场景
标准化:将原始数据变化成均值为0,标准差为1的范围内
公式:X'=(x-mean)/std(标准差)
标准差:反应离散程度-->各值与平均值差的平方和/总数后开方sqrt(((x1-x)^2 +(x2-x)^2 +......(xn-x)^2)/n)
场景:适合大数据环境夏嘈杂的环境
特征降维
ndarray
维数:嵌套的层数
降维
降低特征个数
效果
特征间不相关
降维方法
特征选择
概念:从原有特征中找出主要特征
filter(过滤式):
方差选择法:低方差特征过滤[举例:所有鸟都有爪子,方差为0,可以过滤]
sklearn.feature_selection.VarianceThreshold(threshold=0.0)[方差为0]
相关系数法:特征与特征间的相关程度
相关系数 -1=<r=<1,r>0时两变量正相关,r<0时负相关
|r|=1时,变量完全相关,|r|=0时两变量不相关
|r|->0时,相关性下降,|r|->1时,相关性增加
|r|<0.4为低度相关,0.4=<|r|<0.7为显著相关,0.7=<|r|<1时高度线性相关
相关性很强时
选择其中一个
加权求和
主成分分析
embeded嵌入式
决策树
正则化
深度学习
主成分分析(PCA)
主成分分析:降维
找到合适德直线,通过矩阵运算,得到合适对的结果
sklearn.decomposition.PCA(n_components=2)
案例分析:intacart代码如下
import pandas as pd from sklearn.decomposition import PCA # 获取数据 products_data = pd.read_csv("E:\data\instacart-market-basket-analysis\products.csv") orders_data = pd.read_csv("E:\data\instacart-market-basket-analysis\orders.csv") aisles_data = pd.read_csv("E:\data\instacart-market-basket-analysis\\aisles.csv") orders_product_data = pd.read_csv("E:\data\instacart-market-basket-analysis\order_products__prior.csv") # 合并aisles和products表合并 tab1 = pd.merge(aisles_data, products_data, on=['aisle_id', 'aisle_id']) tab2 = pd.merge(tab1, orders_product_data, on=['product_id', 'product_id']) tab3 = pd.merge(tab2, orders_data, on=['order_id', 'order_id']) # 找到user_id和aisle之间的联系 table = pd.crosstab(tab3['user_id'], tab3['aisle']) # 实例化 transform = PCA(n_components=0.8) # 调用fit_transform方法 data_new = transform.fit_transform(table)