赵走x博客
网站访问量:151900
首页
书籍
软件
工具
古诗词
搜索
登录
深入浅出Python机器学习:31、自动特征选择
深入浅出Python机器学习:30、数据“升维”
深入浅出Python机器学习:29、数据表达
深入浅出Python机器学习:28、聚类算法
深入浅出Python机器学习:27、特征提取
深入浅出Python机器学习:26、数据降维
深入浅出Python机器学习:25、数据预处理
深入浅出Python机器学习:24、神经网络实例一一手写识别
深入浅出Python机器学习:23、神经网络的原理及使用
深入浅出Python机器学习:22、神经网络的前世今生
深入浅出Python机器学习:21、SVM 实例一一波士顿房价回归分析
深入浅出Python机器学习:20、SVM 的核函数与参数选择
深入浅出Python机器学习:19、支持向量机SVM 基本概念
深入浅出Python机器学习:18、随机森林实例一一要不要和中目亲对象进一步发展
深入浅出Python机器学习:17、随机森林
深入浅出Python机器学习:16、决策树
深入浅出Python机器学习:15、朴素贝叶斯实战一一判断肿瘤是良性还是恶性
深入浅出Python机器学习:14、朴素贝叶斯算法的不同方法
深入浅出Python机器学习:13、朴素贝叶斯基本概念
深入浅出Python机器学习:12、使用L1 正则化的线性模型一一套索回归
深入浅出Python机器学习:11、使用L2 正则化的线性模型一一岭回归
深入浅出Python机器学习:10、最基本的线性模型一一线性回归
深入浅出Python机器学习:9、线性模型的墓本概念
深入浅出Python机器学习:8、K 最近邻算法项目实战一一酒的分类
深入浅出Python机器学习:7、K最近邻算法用于回归分析
深入浅出Python机器学习:6、K最近邻算法处理多元分类任务
深入浅出Python机器学习:5、k最近邻算法在分类任务中的应用
深入浅出Python机器学习:4、K 最近邻算法的原理
深入浅出Python机器学习:3、一些必需库的安装及功能简介
深入浅出Python机器学习:2、基于python i吾言的环境配置
深入浅出Python机器学习:1、概述
人脸数据集加载faces = fetch_lfw_people()报错
31、直方图
74、插件开发:Android端API实现
Python3之socket编程--3:基于UDP的套接字
15、使用 jQuery 处理 Ajax 请求
深入浅出Python机器学习:10、最基本的线性模型一一线性回归
资源编号:75893
人工智能
深入浅出Python机器学习
热度:105
线性回归, 也称为普通最小二乘法COLS ),是在回归分析中最简单也是最经典的 线性模型。本节中我们将介绍线性回归的原理和在实践中的表现。
线性回归, 也称为普通最小二乘法COLS ),是在回归分析中最简单也是最经典的 线性模型。本节中我们将介绍线性回归的原理和在实践中的表现。 # 1、 线性回归的基本原理 线性回归的原理是,找到当训练数据集中y 的预测值和其真实值的平方差最小的时候,所对应的w 值和 b 值。线性回归没有可供用户调节的参数,这是它的优势,但也代表我们无法控制模型的复杂性。接下来我们继续使用make_regression 函数,生成一个样本数量为100 , 特征数量为2 的数据集,并且用train_test_split 函数将数据集分割成训练数据集和测试数据集,再用线性回归模型计算出w 值和b 值。现在我们在jupyter notebook 中输入代码如下: ```python # 导人数据集拆分工具 from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.datasets import make_regression X, y = make_regression(n_samples=100, n_features=2, n_informative=2, random_state=38) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) lr = LinearRegression().fit(X_train, y_train) ``` 在上面我们已经学过,方程的斜率w,也被称为权重或者系数,被存储在coef_属性中,而截距b 被存储在intercept_属性中,我们可以通过“print”函数将它们打印出来看一下: ```python print("lr.coef_:{}".format(lr.coef_[:])) print("lr.intercept:{}".format(lr.intercept_)) ``` 代码运行结果: ``` lr.coef_:[70.38592453 7.43213621] lr.intercept:-1.4210854715202004e-14 ``` [结果分析] intercept_ 属性一直是一个浮点数,而coef_属性则是一个NumPy 数组,其中每个特征对应数据中的一个数值,由于我们这次使用make_regression 生成的数据集中数据点有2 个特征,所以lr.coef_ 是一个二维数组。也就是说,在本例中线性回归模型 的方程可以表示为 y = 70.385 9 *$$X_{1}$$ + 7.432l * $$X_{2}$$ -1.42$$e^{-14}$$ # 2、 线性回归的性能表现 下面我们来看看线性回归在make_regress ion 生成的训练数据集和测试数据集中的性能如何, 在jupyter notebook 中输入如下代码: ``` print('训练数据集得分:{:.2f}'.format(lr.score(X_train,y_train))) print('测试数据集得分:{:.2f}'.format(lr.score(X_test,y_test))) ``` 代码运行结果: ``` 训练数据集得分:1.00 测试数据集得分:1.00 ``` [结果分析] 这是一个令人振奋的分数,模型在训练、集和测试中分别取得了满分,也就是1.00 分的好成绩! 不过不要高兴太早,这是因为我们这次没有向数据集添加noise,所以分数自然会打到满分了。不过真实世界的数据集可就没有那么简单了。 真实世界的数据集,往往特征要多得多,而且noise 也不少, 这会给线性模型带来不少的困扰,下面我们就来生成一个来自真实世界的数据集一一糖尿病情数据集,再来测试一下。在jup yter notebook 中输入代码如下: ``` # 载入糖尿病情数据集 from sklearn.datasets import load_diabetes from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split X, y = load_diabetes().data, load_diabetes().target # 将数据集拆分成训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) # 使用线性回归模型进行拟合 lr = LinearRegression().fit(X_train, y_train) ``` 然后我们来看下这个模型针对训练数据集和测试数据集的得分如何,在jupyter notebook 中输入代码如下: ``` print("训练数据集得分:{:.2f}".format(lr.score(X_train, y_train))) print("测试数据集得分:{:.2f}".format(lr.score(X_test, y_test))) ``` 代码运行结果: ``` 训练数据集得分:0.53 测试数据集得分:0.46 ``` [结果分析] 对比这两个分数,你会发现这次模型的分数降低了很多, 模型在训练数据集中分数只有0.53 ,而测试数据集的得分就只有0.46 了。 由于真实世界的数据复杂程度要比我们手工合成的数据高得多,使得线性回归的表现大幅下降了。此外,由于线性回归自身的特点,非常容易出现过拟合的现象。在训练集的得分和测试集的得分之间存在的巨大差异是出现过拟合问题的一个明确信号,因此,我们应该找到一个模型,使我们能够控制模型的复杂度。标准线性回归最常用的替代模型之一是岭回归,我们将在下一小节中进行探讨。