一、实验过程及结果
1.调试并理解回归示例的源代码实现regression.py。掌握其中的datasets.make_regression函数和np.random.normal函数。并生成500个1维的回归数据,以及100个噪声点,作为数据集。
def data(n_samples, n_outliers): # 样本数,噪声点
# X:输入样本 y:输出值 coef:基础线性模型的系数。 仅当coef为True时才返回
X, y, coef = datasets.make_regression(n_samples=n_samples, # 样本数
n_features=1, # 特征数
n_informative=1, # 信息特征的数量,即用于构建用于生成输出的线性模型的特征的数量
noise=10, # 应用于输出的高斯噪声的标准偏差
coef=True, # 如果为True,则返回基础线性模型的系数
random_state=0) # 确定用于生成数据集的随机数生成
# 添加噪声点
np.random.seed(0) # 随机数种子,参数表示随机数起始的位置,使得每次生成的噪声点位置一样,使得X,y的生成规律一样
X[:n_outliers] = 3 + 0.5 * np.random.normal(size=(n_outliers, 1))
y[:n_outliers] = -3 + 10 * np.random.normal(size=n_outliers)
# np.random.normal(loc=0.0, scale=1.0, size=None)
# loc:分布的均值(中心) scale:分布的标准差(宽度) size:生成(n_outlier, 1)的数组
# 公式中的3+0.5是让数据点的横坐标以3为中心呈现正态分布,取0.5是因为横坐标的差值小
return X, y
X, y = data(500, 100)
datasets.make_regression函数产生随机回归问题。输入集可以处于良好状态,也可以具有低秩胖尾部奇异轮廓。通过将具有n_informative非零回归变量的(可能有偏差的)随机线性回归模型应用于先前生成的输入和具有可调整比例的一些高斯中心噪声来生成输出。 np.random.normal函数从正态(高斯)分布中抽取随机样本,此处抽取随机样本作为噪声点。各个参数的具体意义已在代码的注释部分中写明。
data(n_samples,n_outliers)函数中包含以上两个函数,实现了生成n_samples 个1维的回归数据以及n_outliers个噪声点作为数据集的作用,返回值为包括回归数据与噪声点在内的数据集。
由regression.py的运行结果可以看出,一元线性回归的估计系数严重偏离真实值,易受噪声点影响。而RANSAC因为会计算所有样本点的残差,将残差小于预设残差阈值的点归为内点集inlier,其余是外点集outlier,所以不易受噪声点影响,估计系数更接近真实值。
2.使用train_test_split函数将数据集划分为训练集和测试集(8:2),使用一元线性回归和一元二次多项式回归对数据进行拟合。