Step 1:导入需要的库
Numpy
和Pandas
库几乎是每次都要导入的重要的库。Numpy
库包含了一些数学函数以及矩阵等功能,Pandas
库用于导入和管理数据集
Step 2:导入需要的数据集
数据集通常是以.csv
的格式获取,CSV
文件是在纯文本文件中存储的列表数据。文件的每一行都是一条数据记录,我们使用Pandas
中的方法read_csv
来读取本次的CSV文件,读取的数据就是DataFrame
形式。然后我们从DataFrame
中分离出自变量和因变量的矩阵和向量形式。
Step 3:处理缺失值
我们得到的数据很少是完整的,数据可能因为各种原因丢失,需要进一步处理以免影响机器学习模型的表现。我们==可以使用每一列的Mean
或者Median
来替换缺失值==,通常使用sklearn.preprocessing
中的Imputer
类来实现。
Step 4:编码分类数据
分类数据是包含标签值而不是数据的变量,可能值的数量一般限于一个固定的集合中。比如Yes
和No
这样的值是无法在模型的数学等式中使用的,所以我们需要将这样的变量编码为数字类型。这里我们可以使用sklearn.preprocessing
中的LabelEncoder
来实现。
Step 5:将数据集划分为测试集和训练集
我们要将数据集分为两个部分,用于训练模型的那部分称为training set
,用于测试训练好的模型表现的称为test set
,划分的比例一般是==80/20==。可以导入 sklearn.crossvalidation
中的train_test_split()
方法 来实现。
Step 6:特征缩放
大部分机器学习算法都会在两个数据点之间距离计算中使用==欧几里得距离==,而不同特征在幅值、单位以及范围上明显不同就会引发一些问题。在计算距离时,高幅值的特征所占的权重明显高于低幅值的特征。解决这个问题的方式就是使用特征标准化或者Z-score归一化,可以导入sklearn.preprocessing
中的StandardScalar
来处理。
这是一种基于 自变量(X) 的值来预测 因变量(Y) 的方法,这种方法假设两个变量是==线性相关的==。所以,我们尝试找一个线性函数尽可能准确地预测响应值(y),来作为特征或者说自变量(x)的函数。
在这个回归模型中,我们尝试通过找到最佳拟合线 来最小化预测误差,也就是说回归线所造成的误差是最小值。我们要做的是最小化 观测值Yi 和 预测值Yp 之间的长度。
Step 1:数据预处理
采用和之前一样的进行数据预处理的流程图:
- 导入库
- 导入数据集
- 检查缺失值
- 划分数据集
- 使用简单线性回归模型中用到的库进行特征缩放
Step 2:使用训练集训练一元线性模型
这里使用来自sklearn.linear_model
库的LinearRegression
来将数据集训练成模型。然后我们创建一个LinearRegression
类的regressor
对象,最后在使用LinearRegression
类中的fit()
方法基于数据集训练这个regressor
对象。
Step 3:预测结果
现在我们可以根据测试集数据来预测观测值,使用 向量Y_pred
来存储输出。接着再基于在上一步训练的regressor
对象,使用LinearRegression
的predict
方法来预测结果。
Step 4:可视化
最后一步是可视化结果,这里使用matplotlib.pyplot
库来创建训练集结果和测试集结果的散点图,观察和我们模型的预测值的距离。
==多元线性回归==通过找一个可以拟合观测值的线性方程来模拟两个或者多个特征和输出之间的关系。多元线性回归的步骤和一元线性回归很相似,区别主要在于评估方法。我们可以通过它去发现哪个因素对预测输出的影响最大,以及不同变量之间的关系。
- ==线性==:自变量和因变量之间的关系必须是线性的
- ==同方差==:需要保证误差的方差是恒定的
- ==多元正态==:多元回归假设残差是正态分布的
- ==无多元共线性==:假设数据并不是多元共线的;当特征不是互相独立的时候,会出现多元共线
变量过多可能会造成模型精确度降低,尤其是,如果某些变量对结果没有影响或者对其他变量有比较大的影响时。有很多方法来选择合适的变量,比如
- 前向筛选
- 后向消元
- 双向比较
在多元回归模型中使用分类数据,对于包含非数字的数据类型转换为回归模型,是一种很有效的方法。分类数据指的是表征类型的数据值,这种数据值是一个固定的、无序的类型,比如性别(male/female)。在一个回归模型中,这些值可以用一些==哑变量==来代替,通过像1或0这样的值来表示类别值出现与否。
==哑变量陷阱==指的是两个或多个变量高度相关,简单来说就是,一个变量可以由其他变量预测。直观地看,存在重复的类别:比如我们可以丢弃male类别,因为female类别内在已经包含了它(female 的 0 就表示 male,反之亦然)。
解决哑变量陷阱的方法是:如果有m
个种类,那么在模型中使用m-1
个值就行了,剩下的值就可以被看做参考值。
Step 1:数据预处理
- 导入库函数
- 导入数据集
- 补全缺失值
- 如果有必要创建哑变量,同时避免哑变量陷阱
- 使用一元线性回归中使用的函数库进行特征缩放
Step 2:使用训练数据训练模型
这一步和一元线性回归完全相同,我们需要使用 sklearn.linear_model
中的 LinearRegression
类。然后创建一个LinearRegression
类的对象regressor
,接下来使用LinearRegression
类中的fit()
方法,结合训练集数据训练regressor
对象。
Step 3:预测测试结果
现在我们可以由测试集的数据预测观测值,我们将输出保存在一个向量Y_pred
中。这里我们要在上一步中训练的regressor
对象上,使用LinearRegression
类中的predict()
的方法来预测结果。
==逻辑回归==主要用于不同类的问题,也就是分类问题。这种方法的目的是预测正在观测的对象属于哪一类,最终结果会给出0和1其中之一的离散二值化输出。一个常见的例子就是,一个人是否会在即将到来的选举中投票。
逻辑回归通过使用内部的logistic function
,来衡量因变量(标签,也就是我们想预测的)和一个甚至多个因变量(特征)之间的关系。
为了便于做出预测,得到的可能性最终必须被转换成==二元值==,这也是logistic function
的主要任务,这个函数也被称为 sigmoid
函数 。这些在0到1之间的值,会通过一个分类阈值转换为0或1.
逻辑回归得到的是离散输出,而线性回归得到的是连续的输出。
Sigmoid
函数是一条S型的曲线,输入可以是任意实数,并将其映射为0到1之间的一个值,但永远不会达到两个端点值。
k近邻算法是一种简单但是应用广泛的分类算法,同时还可以用于回归。kNN是一种==无参数的==(也就是说它没有对潜在的数据分布做任何假设),==基于实例的==(也就是说我们的算法不会明确地学习一个模型,而是选择去记住训练的实例),并且==应用于无监督学习的场景==。
kNN当用于分类时,输出是一个类的名称(预测分类是一个离散值)。这种方法有3个关键要素:一组标记的对象(比如一组储存的记录),对象之间的距离,以及k的值(表示近邻的数量)。
为了分类一个无标签的对象,先计算该对象到有标签对象之间的距离,确定k个邻近的对象,并且近邻中大部分的类标签决定了该对象的类标签。对于真值输入变量,最常用的距离计算方法是==欧氏距离==。
==欧氏距离==表示新的点和已存在点在所有输入特征上平方差的和的平方根。其他常用的距离计算方法包括:汉明距离,曼哈顿距离以及Minkowski距离。
寻找合适的k值并不是容易的事。k值太小意味着噪声对结果的影响会很大,k值太大是的计算成本较大。所以,k值的选取要根据实际的需求,有时候最好的方式是尝试尽可能多的k值,然后选择最合适的。