机器学习其他常用技术

199 阅读2分钟

决策树

一种对实例进行分类的树形结构,通过多层判断区分目标所属类别 本质是通过多层判断,从训练数据集中归纳出一组分类规则 优点:

  • 计算量小,运行速度快
  • 可清晰查看各属性的重要性

缺点:

  • 忽略属性间的相关性
  • 样本类别分布不均匀时,容易影响模型表现 在这里插入图片描述

决策树求解的三种方法ID3、C4.5、CART

  • ID3:利用信息熵(entropy)原理选择信息增益最大的属性作为分类属性,递归地拓展决策树的分枝,完成决策树的构造

请添加图片描述

  • 引入信息增益

在这里插入图片描述

  • C4.5: 在这里插入图片描述
  • CART: 在这里插入图片描述

异常检测

根据输入的数据,对不符合预期模式的数据进行识别(寻找低概率数据事件)

  • 引入概率密度

在这里插入图片描述

  • 引入高斯分布 在这里插入图片描述

  • 基于高斯分布实现异常检测 在这里插入图片描述

当维度高于一维时高斯分布的应用如下: 在这里插入图片描述

数据降维的实现:主成分分析(PCA)

PCA(principal components analysis):数据降维技术中,应用最多的方法;

  1. 目标:寻找k(k<n)维新数据,使他们反映事物的主要特征;
  2. 核心:在信息损失尽可能少的情况下,降低数据维度

保留主要信息:投影后的不同特征数据尽可能分得开(即不相关)

  • 实现方法:使投影后数据的方差最大,因为方差越大数据也越分散 计算过程

    • 原始数据预处理(标准化:μ=0,δ=1)
    • 计算协方差矩阵特征向量、及数据在各特征向量投影后的方差
    • 根据需求(任务指定或方差比例)确定降维维度k
    • 选取k维特征向量,计算数据在其形成空间的投影

Iris数据集:机器学习经典数据集(简单而具有代表性);常用于监督式学习应用

下面开始进行代码的实现:

  1. 决策树实现Iris数据分类
#模型训练
from sklearn import tree
#min_sample_leaf表示对决策树至少的分类次数
dc_tree = tree.DecisionTreeClassifier(criterion='entropy',min_sample_leaf=5)
dc_tree.fit(X,y)

#可视化决策树
tree.plot_tree(dc_tree,filled='True',
	#feature_names:属性名字,中括号内对其进行命名;class_names:对得出的结果进行命名
feature_names=['SepalLength','SepalWidth','PetalLength','PetalWidth'],class_names=['setosa','versicolor','virginica'])
  1. 异常数据检测
#计算数据均值、标准差:
x1_mean = x1.mean()
x1_sigma = x1.std()

#计算对应的高斯分布数值
from scipy.stats import norm
x1_range = np.linspace(0,20,300) //将数据从0-20划分300个数据点
normal1 = norm.pdf(x1_range,x1_mean,x1_sigma)
#可视化高斯分布曲线
plt.plot(x1_range,normal1)

#模型训练
from sklearn.covariance import EllipticEnvelope()
clf.fit(data)
#可视化异常数据
y_predict = clf.predict(X)
anamoly_points = plt.scatter(
	data.loc[:,'x1'][y_predict==-1],
	data.loc[:,'x2'][y_predict==-1],
	marker='o',
	facecolor="none",
	edgecolor="red",s=250)
  1. PCA(iris数据降维后分类)
#数据标准化预处理:
from sklearn.preprocessing import StandardScaler
X_norm = StandardScaler().fit_transform(X)

#模型训练获得PCA降维后数据:
from sklearn.decomposition import PCA
pca = PCA(n_components=4) //n_components:降维到的具体维度数
X_reduced = pca.fit_transform(X_norm)

#计算各成分投影数据方差比例:
var_ratio = pca.explained_variance_ratio_

#可视化方差比例:
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])//[:,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])