python中的linearregression_Python 线性回归(Linear Regression) - 到底什么是 regression?...

背景

这个 linear Regression 中的 Regression 是什么意思,字面上 Regression 是衰退的意思,线性衰退?相信理解了这个词,对线性回归可能印象深刻些。

Regression 到底是什么意思

搜了一番,原来是为了纪念生物统计学家高尔顿的发现,他是达尔文的表兄,一直想从进化论来研究为何人各有不同。

他的一个重大发现是,父母的身高与子女的身高之间有某种关系。

平时生活中我们也经常纳闷,为啥有的父母个子都很高,子女却比较矮,相反,有的父母都很矮,孩子却很高。高尔顿的解释是,子代的平均身高向中心回归了。正是这种子代身高向同龄人平均身高回归的趋势,使得人类身高没有两极分化。

所以他用“回归”这个词来描述父辈身高 y 和子代身高 x 之间的关系。

还有一个有趣的解释,是从词源来解,regression 中:

"re" :向后,往回,相反,相对

gress = walk, 走

ion :表名词:行动,状态等

炒菜的体验。假设你炒西红柿鸡蛋,要放盐等调料才觉得好吃,你放了一小撮,不够,再加点,结果多了;那就加点水,味道淡了。你感觉有点太淡了,那就再加点盐,直到你炒好了菜,你加盐的过程才结束。 对你来说是美味吧?这就是回归的感觉。

意思就是,不断的调整影响菜的口味的各种调料(盐,水,等),直至找到一个均衡的比例。这个调整的过程中有不断的“回退”。

至此终于理解 regression 的含义了。不过,统计学上的 y 与 x 之间的关系并不总是“回归”的含义。

统计学上的 regression

研究变量之间的关系

变量是指什么?关系是指什么样的关系?

先拿一个具体的线性回归的例子来说:

你想知道,为啥同是 dev,某同事 A 比你年轻,工资却比你高?

换句话说,影响你们工资的因素有哪些?

你想了想,A 虽然年轻,但比你来公司早一点,学历比你高,会说话(可能刚来的时候谈的工资就高?),等等。

对应上面的问题,这个例子中,

变量是什么?

工资(y)

关系是指什么样的关系?

工资和年龄(x1)、工龄(x2)、学历(x3)、性格(x4)等因素之间有什么样的关系

用统计学来表达,就是要找寻一个函-=数 y = f(x), where x: x1....xn.

这里,y (工资) 是因变量,x1...xn(影响 y 的因素) 是自变量。

再举一个例子:

某领导要求下属去考察某市的房地产状况

房价(y)是他要做的考察之一

他要研究哪些因素(x1...xn)影响着该市的房价走向

还有很多其他例子。

重点在于:线性回归研究这两点:

x1...xn 是否有影响 y

如影响,则在多大程度上影响 y

Reference

本文由博客一文多发平台 OpenWrite 发布!

以下是使用梯度下降法实现线性回归模型的Python代码: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt # 加载数据集 data = pd.read_csv('linearRegression_data.txt', header=None, names=['x', 'y']) # 特征缩放 data['x'] = (data['x'] - data['x'].mean()) / data['x'].std() # 添加一列全为1的向量作为截距 data.insert(0, 'Ones', 1) # 将数据集分为特征和目标变量 X = np.matrix(data.iloc[:, :-1].values) y = np.matrix(data.iloc[:, -1:].values) # 初始化theta theta = np.matrix(np.zeros((1, X.shape[1]))) # 定义代价函数 def computeCost(X, y, theta): inner = np.power(((X * theta.T) - y), 2) return np.sum(inner) / (2 * len(X)) # 定义梯度下降函数 def gradientDescent(X, y, theta, alpha, iters): temp = np.matrix(np.zeros(theta.shape)) parameters = int(theta.ravel().shape[1]) cost = np.zeros(iters) for i in range(iters): error = (X * theta.T) - y for j in range(parameters): term = np.multiply(error, X[:, j]) temp[0, j] = theta[0, j] - ((alpha / len(X)) * np.sum(term)) theta = temp cost[i] = computeCost(X, y, theta) return theta, cost # 设置学习率和迭代次数 alpha = 0.01 iters = 1000 # 运行梯度下降算法 theta, cost = gradientDescent(X, y, theta, alpha, iters) # 输出最终的theta值 print(theta) # 绘制代价函数随迭代次数的变化图 fig, ax = plt.subplots() ax.plot(np.arange(iters), cost, 'r') ax.set_xlabel('Iterations') ax.set_ylabel('Cost') ax.set_title('Error vs. Training Epoch') plt.show() ``` 上述代码,我们首先加载数据集,并进行特征缩放,然后添加一列全为1的向量作为截距。接着,我们将数据集分为特征和目标变量,并初始化theta。然后,我们定义代价函数和梯度下降函数。在梯度下降函数,我们迭代地更新theta,并计算代价函数的值。最后,我们设置学习率和迭代次数,并运行梯度下降算法。最终,输出得到的theta值,并绘制代价函数随迭代次数的变化图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值