机器学习-machine learing
基础部分:
机器学习干什么用?————用于预测
f(x) = y
其中 f(x)是特征-features,是学习的知识,来自于训练集(特征feature/属性attribute,标签label/目标target)
y即要预测的结果。
y的结果好不好?
因此:若有一个有10000条的训练数据,一般进行拆分:7500 用于训练集 2500 用于验证集
机器学习框架:sciket-learn
有监督学习:
分类:DecisionTreeClassifer 预测值是离散型的数据
图像识别(是谁?范冰冰?)
垃圾邮件分类
文本分类
回归:DecisionTreeRegression 预测值是连续型的数据
无监督学习(无标签)
聚类(GMM等)
半监督学习:(少量数据有标签)
回归(线性回归,支持向量机回归,决策树回归等)
注:若训练集数据是图像,声音,则用深度学习完成。
一、分类
训练
验证
测试
二、决策树
比较合适分析离散数据
如果是连续数据,要先转成离散数据再进行分析。
1.算法
1)ID3 70.80年代
根据训练集数据,生成出决策树(类似于if——else结构)
例:给出14条数据,用于分析是否买电脑
根据每个特征/标签 先看看每个特征分岔几个?基于希望树越简单越矮越好的目的,选择能够最能决定结果的特征作为父节点。
如何找到谁是最能决定的呢? 信息熵的公司进行计算即可 (信息熵值越小,相关度越大)
信息增益(越大越好)
不断重复以上操作,直到分解结束为止。
实现:python 源码实现(复杂)、框架实现(一句话)
2)C4.5
对ID3的优化:ID3的预测不太准确,;;;;;
改进:信息增益率:(对信息增益加了一个分母)
C4.5倾向于首先选择因此数较多的变量作为父节点
3)CART算法
改进公式,去掉了对数,变成了Gini系数(树也变成了二叉树):
若树出现过拟合状态,则应该将树进行砍掉——即进行剪枝处理(剪枝时亦要处理-原理:少数服从多数的原则)
二值化
多值化
数据变化: one-hot编码(独热法) (将数据编程数字)
from sklearn import tree
import numpy as np
1.载入数据
data= np.getfromtxt('xx.csv',delimiter= ',') #numpy 完成
data
2.读取特征值和标签项
x_data = data[1:,1:-1]
y_data = data[1:,-1]
3.生成决策树
dtree = tree.DeclisionTreeClassifier()
4.拿训练集作为测试集,
dtree.fit(x_data,y_data)
5.对比结果,看准确率
6.导出决策树
1)安装第三方graphviz:pip install graphviz
2)配置路径path:
3)导出决策树:
import graphviz #第三方库,要先安装
dot_tree = tree.export_grahphviz( dtree,
out_file = None,feature_name= ........................................... )
4)生成图像,并存储
例子:泰坦尼克号竞赛题(机器学习中,相当于编程学习的Hello World)
题目:泰坦尼克号船员获救预测
已知:891个数据,有12列(11列特征,1列标签)
目的:训练出一个模型,用于预测
测试:给出418个数据,给了11列的特征值数据,要求给出标签值,
完成:
1.导入数据
2.查看数据并人工分析数据以确定哪些列可以删除,哪些列需要null填充
3.通过画图查看数据关系
用 groupby()分组,用plot画图
4、进行数据清洗
5.生成决策树
6.训练并生成目标结果集
7.结果集比较
8.准确率确认
9.注意:也不能结果太好,要进行相关数据处理,要注意泛化,要注意剪枝处理