1.决策树
任务:根据用户的学习动力,能力提升意愿,兴趣度,空余时间,判断其是否适合学习本门课程。
- 逻辑回归:
- 决策树:
决策树是一种对实例进行分类的树形结构,通过多层判断区分目标所属类别。
本质:通过多层判断,从训练数据集中归纳出一组分类规则。
优点:计算量小,运算速度快;易于理解,可清晰查看各种属性的重要性。
缺点:忽略属性间的相关性;样本类别分布不均匀时,容易影响模型表现
求解:假设给定训练数据集,其中,
为输入实例,m为特征个 数,
为类标记,
,N为样本容量。
目标:根据训练数据集构建一个决策树模型,使他能够对实例进行正确的分类。
问题核心:特征选择,每一个节点选哪一个特征。选择的特征不同,决策树也不同,那么选择哪一个特征的决策树呢?有三种方法:ID3,C4.5,CART(前两者用到了信息增益的概念)
- ID3:利用信息熵原理选择信息增益最大的属性作为分类属性,递归地拓展决策树的分支,完成决策树的构造。
- 信息熵:是度量随机变量不确定性的指标,熵越大,变量的不确定性越大。 假定当前样本集合D中的第k类样本所占比例为
,则D的信息熵为:
。
或0时,Ent(D)=0.
- 信息增益:以属性a进行样本划分带来的信息增益为
,V为根据属性a划分出的类别数,D为当前样本总数,
为类别v的样本数,
是划分前的信息熵,
是划分后的信息熵。
2.异常检测
任务:根据设备上传感器1与2的数据,自动监测设备异常工作状态。
自动寻找图片中异常的目标。
定义:根据输入数据,对不符合预期模式的数据进行识别。
一维数据集:寻找低概率数据事件
基于高斯分布实现异常检测:
- 计算数据均值
,标准差
- 计算对应的高斯分布概率函数:
- 根据数据点概率,进行判断:如果
,该点为异常点。
高维数据集:
- 计算数据均值
和标准差
- 计算概率密度函数
3.主成分分析
数据降维:指在某些限定条件下,降低随机变量个数,得到一组“不相关”主变量的过程。
作用:减少模型分析数据量,提升处理效率,降低计算难度;实现数据可视化。
数据降维的实现:主成分分析PCA
- 目标:寻找k(k<n)维新数据,使他们反应事物的主要特征
- 核心:在信息损失尽可能少的情况下,降低数据维度
- 如何保留主要信息:投影后的不同特征数据尽可能分得开
- 如何实现:使投影后数据的方差最大,因为方差越大数据也越分散
- 计算过程:
1)原始数据预处理(标准化:,
)
2)计算协方差矩阵特征向量,及数据在各特征向量投影后的方差
3)根据需求(任务指定或方差比例)确定降维维度k
4)选取k维特征向量,计算数据在其形成空间的投影
4.实战准备
Iris数据集:
- 3类共150条记录,每类各50个数据。
- 每条记录都有4项特征:花萼长度(Sepal Length),花萼宽度(Sepal Width),花瓣长度(Petal Length),花瓣宽度(Petal Width)
- 通过4个特征预测花卉属于三类(iris-setosa,iris-versicolour,iris-virginica)中的哪一品种。
Iris数据集是机器学习经典数据集:简单而具有代表性;常用于监督式学习应用
决策树实现iris数据分类:
#模型训练
from sklearn import tree
dc_tree = tree.DecisionTreeClassifier(criterion = 'entropy',min_samples_leaf = 5)
dc_tree.fit(X,y)
#可视化决策树
#filled = 'True':同一类别填充同一种颜色
tree.plot_tree(dc_tree,filled = 'True',
feature_names = ['SepalLength','SepalWidth','PetalLength','PetalWidth'],
class_names = ['setosa','versicolor','virginica'])
异常数据检测:
#数据分布统计
#x1:展示的数据 bins:横坐标划分了100个小格子
plt.hist(x1,bins = 100)
#计算数据均值,标准差
x1_mean = x1.mean()
x1_sigma = x1.std()
#计算对应的高斯分布数值
#linspacce(0,20,300):生成0~20的300个数据点
#pdf:概率密度函数点
from scipy.stats import norm
x1_range = np.linspacce(0,20,300)
normal1 = norm.pdf(x1_range,x1_mean,x1_sigma)
#可视化高斯分布曲线
plt.plot(x1_range,normal1)
#模型训练
from sklearn.covariance import EllipticEnvelope
clf = EllipticEnvelope()
clf.fit(data)
#可视化异常数据
anamoly_points = plt.scatter(data.loc[:,'x1'][y_predict == -1],data.loc[:,'x2'][y_predict == -1],marker = 'o',facecolor = 'none',edgecolor = 'red'.s = '250')
PCA降维后分类:
#数据标准化预处理
from sklearn.preprocessing import StandardScaler
X_norm = StandardScaler().fit_transfrom(X)
#模型训练获得PCA降维后数据
from sklearn.decomposition import PCA
pca = PCA(n_components = 4)
X_reduced = pca.fit_transform(X_norm)
#计算各成分投影数据方差比例
var_ratio = pca.explained_variance_ratio_
#可视化方差比例
#[1,2,3,4]:想画4个比例的
plt.bar([1,2,3,4],var_ratio)
plt.title('variance ratio of each component')
plt.xticks([1,2,3,4],['PC1','PC2','PC3','PC4'])
plt.ylabel('var_ratio')
plt.show()
#可视化PCA后数据
setosa = plt.scatter(X_reduced[:,0][y==0],X_reduced[:,1][y==0])
versicolor = plt.scatter(X_reduced[:,0][y==1],X_reduced[:,1][y==1])
virginica = plt.scatter(X_reduced[:,0][y==2],X_reduced[:,1][y==2])
5.实战一:决策树实现iris数据分类
- 基于iris_data.csv数据,建立决策树模型,评估模型表现
- 可视化决策树结构
- 修改min_samples_leaf参数,对比模型结果
6.实战二:异常数据检测
- 基于anomaly_data.csv数据,可视化数据分布情况,及其对应高斯分布的概率密度函数
- 建立模型,实现异常数据点检测
- 可视化异常检测处理结果
- 修改概率分布阈值EllipticEnvelope(contamination = 0.1)中的contamination ,查看阈值改变对结果的影响
7.实战三:PCA(iris数据降维后分类)
- 基于iris_data.csv数据,建立KNN模型实现数据分类(n_neighbors = 3)
- 对数据进行标准化处理,选取一个维度可视化处理后的效果
- 进行与原数据等维度PCA,查看各主成分的方差比例
- 保留合适的主成分,可视化降维后的数据
- 基于降维后数据建立KNN模型,与原数据表现进行对比