# 100-Days-Of-ML-Code **Repository Path**: yangmiao123/100-Days-Of-ML-Code ## Basic Information - **Project Name**: 100-Days-Of-ML-Code - **Description**: 机器学习100天 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 3 - **Created**: 2019-01-09 - **Last Updated**: 2025-07-07 ## Categories & Tags **Categories**: ebooks-manual **Tags**: None ## README # 100-Days-Of-ML-Code 原文:[Avik-Jain:100-Days-Of-ML-Code](https://github.com/Avik-Jain/100-Days-Of-ML-Code) #### 介绍 机器学习100天 #### **第一天 | 数据处理** 1、导入需要的库 numpy 和 pandas numpy-包含数学计算函数 pandas-用于导入和管理数据集 2、导入数据集 数据集采用.csv格式。csv以文本形式保存表格数据,即文件每一行是一条数据记录。可以采用pandas的read_csv读取本地的csv为一个数据帧,通过数据帧制作自变量和因变量的矩阵和向量。 3、处理丢失数据 我们得到的数据很少是完整的,可能由于某种原因造成丢失,为了不降低机器学习性能,需要处理数据。采用sklearn.preprocesing库导入Imputer类 4、解析分类数据 分类数据指含有标签值得变量,取值范围一般是固定的,例如“yes”和“no”不能作为模型的数学计算,需要解析成数字。为了实现这一功能可以从sklearn.perprocesing库导入LabelEncoder类 5、拆分数据集为测试数据集合和训练集合 把数据集处理拆分成两个:一个是用于训练模型的训练集合,一个是用于验证模型的测试集合,两者比例一般为80:20。采用sklearn.crossvalidation库中的train_test_split()方法 6、特征缩放 大部分模型算法使用两点间的欧式距离表示,但此特征在幅度、单位和范围姿态等问题上变化很大。在距离计算中,高幅度的特征比低幅度的特征权重更大,可使用特征标准化或者Z值归一化解决。导入sklearn.preprocrssing库的dardScalar类 #### **第二天 | 简单线性规划** ##### 使用单一特征来预测因变量 这是一种基于自变量(x)来预测因变量(y)的方法。假设这两个变量是线性相关的,我们尝试寻找一种根据特征或者自变量(x)的线性关系来精确预测因变量(y)。 ##### 找到最佳的拟合线 在回归任务中,我们将通过“最佳拟合线”来最小化预测的误差,即回归线的误差是最小的,尽量最小化实际值(Yi)和模型预测值(Yp)之间的长度。 y位因变量,x1为自变量,在这回归任务中,我们将预测一个学生根据所学习小时数来计算分数的百分比。 b0为y的截距,b1为斜率 ##### 1、数据预处理 按照之前的数据预处理信息表那样执行相同的步骤 * 导入相关库 * 导入数据集 * 检查缺失数据 * 划分数据集 * 特征缩放(使用线性模型的相关库) ##### 2、训练简单线性回归模型 为了使用数据集训练模型,我们使用sklearn.liner_model库的LinearRegression类,创建一个LinearRegression类的regressor对象,使用LinearRegression类的fit()方法对数据集进行训练 ##### 3、预测结果 预测测试集的结果,将输出保存在向量Y_pred中,使用前一步训练的回归模型,采用LinearRegression类预测方法对结果进行预测 ##### 4、可视化 采用matplotlib.pyplot库对训练结果和预测结果做散点图,查看模型效果 #### **第三天 | 多元线性回归** > 多元线性回归尝试通过一种线性方程适配观测数据,这个方程是由两个或者两个以上特征与应变量构建的一个关系。多元线性回归和简单线性回归实现步骤很相似,在评价部分有所不同。你可以用它来找出在预测结果上那个因素影响力最大,以及不同变量是如何互相关联的。 > > y是因变量,x0,x1...xn是多元自变量 ##### 前提 > 想要有一个成功的回归分析,确认这些假设很重要 1. 线性:自变量和因变量的关系应该是线性的(即,特征值和预测值是线性相关的) 2. 方差齐性(常数方差):误差项的分散(即方差)必须等同 3. 多元正态分布:多元回归假定残差符合正态分布 4. 缺少多重共线性:假设数据有极少甚至没有多重共线性,当特征(或自变量)不是相互独立时,会引发多重共线性 ##### 注意 > 过多的变量可能会降低模型的精准度,尤其是如果存在一些对结果无关的变量,或者存在对其他变量造成很大影响的变量。 **这里介绍一些选择合适变量的方法** 1. 向前选择法 2. 向后选择法(向后剔除法/向后消元法) 3. 向前向后法:结合了上述说的向前法和向后法,先用向前发筛选一遍,再用向后法筛选一遍,直到最后无论怎么筛选模型变量都不再发生变化,就算结束了 ##### 虚(拟)变量 在多元回归模型中,当遇到数据集是非数值数据类型时,使用分类数据是一个非常有效的方法。分类数据,是指反映(事物)类别的数据,是离散数据,其数据个数(分类属性)有限(但可能很多)且值之间无序。比如,按性别分为男女两类。在一个回归模型中,这些分类值可以用虚拟变量来表示,变量通常取1或者0这样的值,来表示肯定或者否定类型。 ##### 虚拟变量圈套 虚拟变量圈套是指两个以上(包括两个)变量之间的高度相关的情形。简而言之,就是存在一个能够被其他变量预测的变量,我们举一个存在重复类别(变量)的直观例子:假设我们舍弃男性类别,那么该类别也可以通过女性类别来定义(女性值为0,表示男性,为1,表示女性),反之亦然。 解决虚拟变量圈套的方法是类别变量减去一:假如有m个类别,那么在模型构建时取m-1个虚拟变量,减去的那个变量可以看做是参照值。 D1、D2虚拟变量 ##### 1、数据预处理 1. 导入相关库 2. 导入数据集 3. 检查缺失数据 4. 数据分类 5. 编辑虚拟变量并注意避免虚拟变量圈套 6. 特征缩放我们将用简单线性回归模型的相关库来做 ##### 2、训练模型 这一步和简单线性回归模型处理相同,用sklearn.liner_model库的LinearRegression类,创建一个LinearRegression类的regressor对象,使用LinearRegression类的fit()方法对数据集进行训练 ##### 3、预测结果 在测试集上进行预测,将出输出结果保存在向量Y_pred中,使用上一步训练用到的LinearRegression类的regressor对象,训练完之后用其predict方法预测结果。 参考:[Avik-Jain:100-Days-Of-ML-Code](https://github.com/Avik-Jain/100-Days-Of-ML-Code)