不愧字节,一面巨细。。。


Hello,我是kk~‍‍‍‍‍‍‍
数据科学这个岗位,加上职级比较低的话。对于很多问题来说,基本比较简单, 但是也很细。
今天看到这位同学的面试记录,可以看到很基础,但是也很细致。

之前给应届生,强调过的几点,在学校,一定要做的几件事:
基础知识稳扎稳打、参加比赛、参加公司实习,这是最重要的几方面,一定要做到。
咱们今天就其中的线性回归的共线性、过拟合、正则化进行一个简单的梳理。
大家可以当做复习。
线性回归的共线性、过拟合、正则化
线性回归是一种常用的机器学习算法,用于建立输入特征与输出目标之间的线性关系。在线性回归中,我们通常面临共线性、过拟合和正则化等问题。下面我将详细解释这些概念的原理和核心公式,同时给出优缺点、适用场景,以及相应的Python代码和图形。
1. 共线性(Collinearity)
共线性指的是特征之间存在高度相关性,导致模型难以准确估计每个特征对目标变量的影响。共线性可能导致模型的系数估计不稳定,使其对输入特征的小变化非常敏感。
共线性的存在可以通过计算特征间的方差膨胀因子(VIF)来衡量。VIF的计算公式如下:
其中 
 是特征 
 与其他特征的相关性的平方。
2. 过拟合(Overfitting)
过拟合指的是模型在训练数据上表现良好,但在未见过的测试数据上表现较差。这是因为模型过于复杂,学到了训练数据的噪声,而不是真实的模式。
过拟合可以通过模型的复杂度来解释,通常通过模型的参数数量或者多项式的阶数来衡量。一个过于复杂的模型容易过拟合。
3. 正则化(Regularization)
正则化是为了解决过拟合问题而提出的一种方法,通过在损失函数中添加正则项来限制模型参数的大小,防止模型过度拟合。
线性回归的损失函数加上正则项的表达式如下:
其中,
 是正则化参数,控制正则项的强度。
核心代码
以下是一个考虑共线性、过拟合和正则化的线性回归示例代码。这个代码使用了Ridge回归,其中包含了L2正则化项。此外,代码还绘制了图表,以可视化线性回归模型的效果。
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import Ridgefrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.pipeline import make_pipelinefrom sklearn.metrics import mean_squared_error# 生成带有共线性的样本数据np.random.seed(42)X = 2 * np.random.rand(100, 1)y = 4 + 3 * X + np.random.randn(100, 1)# 通过添加一个相关的特征引入共线性X_collinear = np.c_[X, 0.5 * X + np.random.randn(100, 1)]# 将数据分割为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X_collinear, y, test_size=0.2, random_state=42)# 使用Ridge回归模型,添加正则化项degree = 1  # 多项式的阶数,1表示线性模型alpha = 1.0  # 正则化强度,可以根据需要调整model = make_pipeline(PolynomialFeatures(degree), Ridge(alpha=alpha))model.fit(X_train, y_train)# 在测试集上进行预测y_pred = model.predict(X_test)# 绘制图表plt.scatter(X_test[:, 0], y_test, color='blue', label='Actual data')plt.scatter(X_test[:, 0], y_pred, color='red', label='Predicted data')plt.xlabel('X')plt.ylabel('y')plt.legend()plt.title('Linear Regression with Collinearity and Regularization')plt.show()# 打印均方误差mse = mean_squared_error(y_test, y_pred)print(f"Mean Squared Error: {mse}")

在这个代码中,我使用了PolynomialFeatures来添加多项式特征,以引入一些复杂性。你可以调整degree参数来改变多项式的阶数。同时,通过调整alpha参数,你可以控制正则化的强度。这个例子中的模型是线性的,但通过调整degree你可以尝试更高阶的多项式。
推荐阅读
不愧是微软,巨深入
不愧是京东,面试超开心
拼多多,目前薪资天花板
到顶部