diff --git a/docs/1.机器学习基础-选择算法.png b/docs/1.机器学习基础-选择算法.png new file mode 100644 index 00000000..a6986984 Binary files /dev/null and b/docs/1.机器学习基础-选择算法.png differ diff --git a/docs/1.机器学习基础.md b/docs/1.机器学习基础.md index ee1c06e6..c2d66dba 100644 --- a/docs/1.机器学习基础.md +++ b/docs/1.机器学习基础.md @@ -3,25 +3,59 @@ * 机器学习是什么 * 把无序的数据转换成有用的信息。 + * 机器学习的意义 * 我们利用计算机来彰显数据背后的真实含义。 + * 机器学习的任务 * 机器学习的主要任务就是分类。 + * 分类:将实例数据划分到合适的分类中。 + * 机器学习的另一项任务是回归。 + * 回归:主要用于预测数值型数据。(例子———数据拟合曲线:通过给定数据点的最优拟合曲线) + +* 目标变量 + * 目标变量是机器学习预测算法的测试结果。 + * 在分类算法中目标变量的类型通常是标称型的,而在回归算法中通常是连续型的。 + +* 机器学习的训练过程 + * ![机器学习训练过程图](./1.机器学习基础训练过程.png) + * 监督学习 + * 必须知道预测什么,即必须知道目标变量的分类信息。分类和回归属于监督学习。 * 样本集:训练数据 + 测试数据 + * 训练样本 = 特征 + 目标变量 + * 训练样本的集合称为训练样本集,训练样本集必须确定知道目标变量的值,以便机器学习算法可以发现特征和目标变量之间的关系。 * 特征(feature-是否有缺失情况) + 目标变量(分类-离散值/回归-连续值<0~100、 -999~999>) + * 特征或者属性通常是训练样本集的列,它们是独立测量得到的结果,多个特征联系在一起共同组成一个训练样本。 * `知识表示`:机器已经学会如何识别鸟类的过程 * 1.可以采用规则集的形式 * 2.可以采用概率分布的形式 * 3.可以使训练样本集中的一个实例 + * 非监督学习 + * 数据没有类别信息,也不会给定目标值 + * 聚类:在无监督学习中,将数据集合分成由类似的对象组成的多个类的过程称为聚类; + * 密度估计:将寻找描述数据统计值的过程称之为密度估计。 + * 此外,无监督学习还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。 + +* 选择算法需要考虑的两个问题 + * 使用机器学习算法的目的。 + * 想要完成何种任务,比如是预测明天下雨的概率还是对投票者按照兴趣分组;如果想要预测目标变量的值,则可以选择监督学习算法,否则可以选择无监督学习算法。 + * 需要分析或收集的数据是什么 +* 举例 +* ![选择算法图](./1.机器学习基础-选择算法.png) + * 开发的步骤 * 1.收集数据 * 2.准备输入数据 + * 注意数据的格式 * 3.分析输入数据 + * 为了确保数据集中没有垃圾数据;如果是算法可以处理的数据格式或可信任的数据源,则可以跳过该步骤;另外该步骤需要人工干预,会降低自动化系统的价值。 * 4.训练算法 + * 如果使用无监督学习算法,由于不存在目标变量值,则可以跳过该步骤 * 5.测试算法 * 6.使用算法 + * Python相关的库 * 科学函数库:SciPy、`NumPy`(底层语言:C和Fortran) * 绘图工具库:`Matplotlib` diff --git a/docs/1.机器学习基础训练过程.png b/docs/1.机器学习基础训练过程.png new file mode 100644 index 00000000..28f7ae0b Binary files /dev/null and b/docs/1.机器学习基础训练过程.png differ diff --git a/src/python/14.SVD/svdRec.py b/src/python/14.SVD/svdRec.py new file mode 100644 index 00000000..f705e37e --- /dev/null +++ b/src/python/14.SVD/svdRec.py @@ -0,0 +1,30 @@ +# coding=utf-8 +def loadExData(): + return[[1,1,1,0,0], + [2,2,2,0,0], + [1,1,1,0,0], + [5,5,5,0,0], + [1,1,0,2,2], + [0,0,0,3,3], + [0,0,0,1,1]] + +from numpy import * +from numpy import linalg as la +# 欧氏距离相似度,假定inA和inB 都是列向量 +# 计算向量的第二范式,相当于计算了欧氏距离 +def ecludSim(inA,inB): + return 1.0/(1.0 + la.norm(inA - inB)) + +# pearsSim()函数会检查是否存在3个或更多的点。 +# corrcoef直接计算皮尔逊相关系数 +def pearsSim(inA,inB): + # 如果不存在,该函数返回1.0,此时两个向量完全相关。 + if len(inA)< 3 :return 1.0 + return 0.5 + 0.5*corrcoef(inA,inB,rowvar = 0)[0][1] + +# 计算余弦相似度 +def cosSim(inA,inB): + num = float(inA.T*inB) + denom = la.norm(inA)*la.norm(inB) + return 0.5 +0.5*(num/denom) +