每日三思(4月16日)
每日三思(4月16日)
今天和数模队友研究了数据处理的方法,算法的实现,还有一些画图的小技巧。
问题一:Z分数是什么?为什么用它来检测数据异常值?
Z 分数是用来衡量一个数据点与平均值的距离,它告诉你这个数据点离其他数据有多远,距离单位是标准差。
- Z 是 Z 分数,表示数据点与均值的标准差距离。
- 是某个数据点的值。
- 是所有数据点的均值(平均值)。
- 是数据集的标准差,表示数据的离散程度。
Z分数是计算一个点与平均水平的距离,只不过它的距离单位是标准差。
识别异常值: 通过Z分数的大小(比如大于3或者小于-3),说明这个数据点与平均值差距很大,可能是异常值,需要注意(剔除)。
Z分数还可以用来对不同数据集的数据点进行比较,即使两个数据集的范围不同,通过Z分数我们可以通过计算两个数据点相对于平均值的距离从而比较两者的水平。
问题二:总结一下数据预处理的标准方法和流程是什么样的?
1. 理解数据
首先,我们要了解数据长什么样。比如,数据包含哪些列,每列表头是什么。
同时还要检查数据类型:确保每一列的数据类型正确,比如年龄是整数,价格是浮动的数字。
2. 处理缺失数据(Missing Data)
-
对缺失值进行检查:查看数据中是否有空值(即缺失的数据),这很常见,可能是因为数据采集的原因,或者记录时漏掉了一些数据。
-
对缺失值进行填充:
- 填充均值、中位数或众数:对于数值型数据,常用列的均值、中位数等来填充缺失值。
- 删除缺失值:如果缺失值较少,可以直接删除这些行。
- 插值法:对于时间序列数据,可以根据前后数据插值填充缺失值。
3. 处理异常值(Outliers)
-
检测异常值:异常值是指那些与大部分数据点差距极大的数据。可以通过箱线图、Z 分数等方法来检测。
-
处理异常值:
- 删除异常值:如果异常值是错误数据,或者与问题无关,可以删除。
- 修正异常值:如果能根据其他数据推测出正确的值,可以修正这些数据。
4. 数据清洗(Data Cleaning)
删除无关的列,更改出错的数据。
5. 数据转换(Data Transformation)
- 标准化(Standardization) :如果数据的范围差距很大(比如身高是几百,体重是几十),可以使用标准化让数据变得一致。标准化将数据转换为均值为 0、标准差为 1 的分布。
- 归一化(Normalization) :将数据缩放到一个特定范围(比如 0 到 1),这种方法适用于数值范围有差距的数据,尤其在神经网络中常用。
6. 特征工程(Feature Engineering)
- 特征选择(Feature Selection) :选择对目标变量(要预测的变量)有影响的特征。有些特征对模型帮助不大,可以删除。
- 特征构造(Feature Construction) :通过现有特征构建新的特征,比如通过年龄和收入的组合来创建一个 “消费潜力” 特征。
数据降维也是其中的重要一步。
7. 数据集划分(Data Splitting)
- 划分训练集和测试集:为了验证模型的泛化能力,我们将数据分为两个部分:训练集、测试集,正常按照时间序列进行八二分,需要结合要求选择合适的划分方法。
问题三:今天算法学了什么?有什么理解?
今天学习了两道关于vector
的两道例题:完数、剩下的树
两道题中都运用了vector
来储存动态数据,还有使用了vector
的迭代器 vector::iterator
来按顺序访问vector
的每一个元素。
完数中运用了 push_back
操作向 vector
中插入元素。
剩下的树则是通过修改 road
数组中的元素的某些值,动态标记哪些位置是没有树的。昨天讲述的是如果 vector
在中间进行了插入或者删除操作后编号会乱掉,导致 vector
失效。但本题通过 road[j] = 1
来标记某些区间没有树,road[j] = 0
标记区间有树,只改变了已有元素的值并没有进行删除或者插入操作并不影响 vector
的功能。
通俗易懂的解释就是在我们生活中,突然插入或者删掉一个时间安排,我们的计划会被打乱。但如果只是改变计划中的原定内容,对我们的计划并没有什么改变,对我们的影响也不大。