一、数据的特征工程
1.1 定义
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性
特征处理是指通过特定的统计方法(数学方法)将数据转换成算法要求的数据
1.2 意义
直接影响模型的预测结果
1.3 安装
可以学习一下Scikit-learn库
安装方法:创建一个基于python3的虚拟环境
mkvirtualenv -p /sur/bin/python3.5 ml3
在ubuntu 的虚拟环境中运行以下命令:
pip3 install Scikit-learn
然后通过导入命令查看是否可以使用:
import sklearn
1.4 数据的特征抽取
特征抽取针对的是非连续型数据
特征抽取对文本等进行特征值化(为了计算机更好地去理解数据)
sklearn特征抽取API: sklearn.feature_extraction
1. 字典特征抽取:对字典数据进行特征值化
类:sklearn.feature_extraction.DictVectorizer
2. 文本特征抽取:对文本数据进行特征值化
类:sklearn.feature_extraction.text.CountVectorizer
3. 对中文文本特征值化: 需要对中文进行分词才能详细地进行特征值化,可以使用jieba分词工具,
安装方式:
pip3 install jieba
使用方式:
import jieba
jieba.cut("我的名字叫甘小鹿")
4. 根据词语占比判断文章类型: TF-IDF思想
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高, 并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分 能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
类:sklearn.feature_extraction.text.TfidfVectorizer
1.5 数据的特征处理
通过特定的统计方法(数学方法)将数据转换成算法要求的数据
对于数值型数据:
标准缩放:
1. 归一化(注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景)
2. 标准化(通过对原始数据进行变换把数据变换到均值为0,方差为1范围内)
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变 ;
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
对于类别型数据:one-hot编码
对于时间类型:时间的切分
ps.对于以上方法可以自己查询一下资料,在这里就不一一介绍了
sklearn特征化API: scikit-learn.preprocessing.StandardScaler
处理数据中的缺失值:删除(删除整行或列)或者插补(通过平均值、中位数来填充)
sklearn缺失值API: sklearn.preprocessing.Imputer
1.6 数据的特征选择
原因:
冗余:部分特征的相关度高,容易消耗计算性能
噪声:部分特征对预测结果有负影响
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征, 特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
主要方法:
Filter(过滤式):VarianceThreshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)
特征选择API:sklearn.feature_selection.VarianceThreshold
其他方法:神经网络
1.7 数据的主成分分析
降维API:sklearn. decomposition
PCA(主成分分析)
本质:PCA是一种分析、简化数据集的技术 目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
高维数据容易出现的问题:特征之间通常是线性相关的
举个例子:
若投影到x轴,则损失了y方向的关系,这些点如何降维?
1.8 案例分析:
products.csv 商品信息
order_products__prior.csv 订单与商品信息
orders.csv 用户的订单信息
aisles.csv 商品所属具体物品类别
-
合并各张表到一张表当中:
pd.merge() 通过中间值key合并
products.csv:product_id, aisle_id
order_products__prior.csv: product_id, order_id
orders.csv:order_id,user_id
aisles.csv:aisle_id,aisle
products.csv和order_products__prior.csv通过product_id合并为_mg,
_mg和orders.csv通过order_id合并为新的_mg
最后再和aisles通过aisles_id合并为_mt -
建立一个类似行、列数据
交叉表(特殊的分组工具) -
主成分分析
代码:
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
# 读取四张表的数据
prior = pd.read_csv("/Users/mac/instacart/order_products__prior.csv")
products = pd.read_csv("/Users/mac/instacart/products.csv")
orders = pd.read_csv("/Users/mac/instacart/orders.csv")
aisles = pd.read_csv("/Users/mac/instacart/aisles.csv")
# 合并四张表到一张表 (用户-物品类别)
_mg = pd.merge(prior, products, on=['product_id', 'product_id']) #两张表的key都要有
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])
mt.head(10)
# 交叉表(特殊的分组工具)
cross = pd.crosstab(mt['user_id'], mt['aisle']) #指定两个参数,行与列
cross.head(10)
# 进行主成分分析
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross) #输入必须是行、列型的 所以前面要用交叉表处理
data
ps. 特征选择与主成分分析:维度上百时一般就用主成分分析
二、机器学习基础
离散型数据:汽车数量、人口数量等
连续型数据:变量可以在范围内取任意一个值(长度、时间、质量等)
2.1 算法分类:(数据:特征值+目标值)
监督学习(特征值+目标值):
分类(针对离散型数据) k-近邻算法、贝叶斯分类、决策树与随即森林、逻辑回归、神经网络 应用:人脸识别、客户分类模型、手写识别、文本分类等
回归(针对连续型数据) 线性回归、岭回归
应用:房价预测、金融信息,每日股票值、预测明天气温
无监督学习(特征值):聚类 k-means
2.2 开发流程:
- 原始数据明确问题做什么
- 数据的基本处理
- 特征工程
- 找到合适算法进行预测
- 模型的评估,判定效果
- 不合适的话就换算法、参数;合适的话就上线