深入了解机器学习(Descending into ML):线性回归

人们早就知晓,相比凉爽的天气,蟋蟀在较为炎热的天气里鸣叫更为频繁。数十年来,专业和业余昆虫学者已将每分钟的鸣叫声和温度方面的数据编入目录。Ruth 阿姨将她喜爱的蟋蟀数据库作为生日礼物送给您,并邀请您自己利用该数据库训练一个模型,从而预测鸣叫声与温度的关系。

首先建议您将数据绘制成图表,了解下数据的分布情况:

图 1. 每分钟的鸣叫声与温度(摄氏度)的关系。

毫无疑问,此曲线图表明温度随着鸣叫声次数的增加而上升。鸣叫声与温度之间的关系是线性关系吗?是的,您可以绘制一条直线来近似地表示这种关系,如下所示:

图 2. 线性关系。

事实上,虽然该直线并未精确无误地经过每个点,但针对我们拥有的数据,清楚地显示了鸣叫声与温度之间的关系。只需运用一点代数知识,您就可以将这种关系写下来,如下所示:

y = mx + b

其中:

  • y指的是温度(以摄氏度表示),即我们试图预测的值。
  • m指的是直线的斜率。
  • x指的是每分钟的鸣叫声次数,即输入特征的值。
  • b指的是 y 轴截距

按照机器学习的惯例,您需要写一个存在细微差别的模型方程式:

y' = b + ω₁x₁

其中:

  • y'指的是预测标签(理想输出值)。
  • b指的是偏差(y 轴截距)。而在一些机器学习文档中,它称为ω0
  • ω指的是特征 1 的权重。权重与上文中用 m表示的“斜率”的概念相同。
  • x指的是特征(已知输入项)。

要根据新的每分钟的鸣叫声值x推断(预测)温度 y',只需将 xx1 值代入此模型即可。

下标(例如 ω 和 xx1

)预示着可以用多个特征来表示更复杂的模型。例如,具有三个特征的模型可以采用以下方程式:

y' = b + ωx₁ + ω₂χ₂  + ω₃χ₃

y′=b+w1x


y=mx+
### 主成分分析中特征向量的作用 在主成分分析(PCA)过程中,特征向量扮演着至关重要的角色。每一个特征向量指示了一个数据集的主要变化方向,在这个方向上的投影能够最大程度地保留原始数据的信息[^1]。 对于给定的数据集,计算协方差矩阵之后,对其进行特征值分解可以获得一系列的特征值及其对应的特征向量。这些特征向量即为主成分的方向,它们彼此之间相互正交,并且按照所关联的特征值大小排序,其中较大的特征值意味着该方向上具有更高的方差,因此携带了更多的信息[^3]。 ### 特征向量的计算过程 为了求解PCA中的特征向量,通常遵循如下流程: #### 计算协方差矩阵 假设有一个数据中心化后的矩阵 \(X\) ,则可以通过下面的方式构建协方差矩阵 \(\Sigma\): \[ \Sigma = X^T X / n \] 这里\(n\)表示样本数量。 ```python import numpy as np def compute_covariance_matrix(X): """ Compute the covariance matrix of a given data set. Parameters: X : array-like, shape (n_samples, n_features) The input dataset with samples row-wise and features column-wise. Returns: cov_mat : ndarray, shape (n_features, n_features) Covariance matrix computed from the input dataset. """ # Ensure that we are working on centered data by subtracting mean along columns X_centered = X - np.mean(X, axis=0) # Calculate the covariance matrix using dot product divided by number of observations minus one cov_mat = np.dot(X_centered.T, X_centered)/(X.shape[0]-1) return cov_mat ``` #### 进行特征值分解并获取特征向量 一旦得到了协方差矩阵,就可以利用线性代数库来进行特征值分解操作: ```python from scipy.linalg import eigh def get_eigenvectors(cov_mat, num_components=None): """ Perform eigenvalue decomposition to obtain eigenvectors sorted according to their corresponding eigenvalues in descending order Parameters: cov_mat : array-like, square symmetric matrix representing the covariance or correlation between variables num_components : int, optional(default is None which means all components will be returned) Number of top principal components you want to keep Returns: eig_vecs : ndarray containing only selected eigenvectors based on specified `num_components` parameter, otherwise returns full set if no value provided for this argument. Note: Returned vectors form an orthogonal basis where each vector points towards maximum variance direction within original feature space. They also come paired up alongside respective scalar values quantifying amount spread present thereat. """ # Get both eigenvalues 'w' & associated normalized ('unit') eigenvectors 'v' w, v = eigh(cov_mat) # Sort them into decreasing importance; remember Python lists start at index zero so flip accordingly when slicing later... idx = (-w).argsort()[:len(w)] ordered_w = w[idx] ordered_v = v[:,idx] if not isinstance(num_components,(type(None))): assert type(num_components)==int,"Parameter must either remain unset OR provide integer count!" return ordered_v[:,:num_components],ordered_w[:num_components] else: return ordered_v,w ``` 上述代码片段展示了如何基于输入的数据集来获得所需的特征向量集合。值得注意的是,返回的结果已经根据特征值进行了降序排列,从而使得最重要的几个分量位于前列[^4]。 ### 应用场景举例 当选择了合适的主成分后,便可以将原高维数据转换成较低维度的新坐标系下表达形式。这种变换不仅有助于减少存储需求、加快后续处理速度,而且往往还能改善机器学习模型的表现效果,因为去除了一些冗余或噪声信息[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值