特征工程

常听一句话说 “你还能玩儿出花来”,我觉得特征工程就是这么个把那些看上去普普通通的 “数据” 玩儿出花的过程。如果用 DIKW 模型(Data Information Knowledge Wisdom)来理解,Data 显然就是原始的一个个数据值,Information 就是对数据进行分析、处理后得到的具有一定意义的东西。

严格的定义如下:特征工程是对原始数据进行一系列工程处理,将其提炼为特征根,作为模型的输入。它旨在去除原数据中的杂质和冗余,使得模型与预测值之间能够以此建立联系。

More

EDA

探索性数据分析 EDA(Exploratory Data Analysis)是数据分析和挖掘的第一步,主要是对数据集进行了解,包括基本情况、特征情况、特征间关系等等,为进一步的分析和挖掘提供信息。

一个完整的 EDA 过程一般大致包括四步:

  • 问题定义:问题定义涉及的主要任务是定义分析的主要目标,定义主要的可交付成果,概述主要角色和职责,获取数据的当前状态,定义时间表以及执行成本/收益分析。
  • 数据准备:包括数据源定义、数据 schema 定义、数据特征了解、数据清理、数据转换、数据分割等。
  • 数据分析:这是处理描述性统计信息和数据分析的最关键步骤之一。 主要任务包括汇总数据,发现数据之间隐藏的关联和关系,开发预测模型,评估模型以及计算精度。
  • 结果展示:以图表、摘要、地图和图表的形式将数据集呈现给目标受众。

More

Find First and Last Position of Element in Sorted Array (LeetCode 34)

Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm’s runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

Example 1:

1
2
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

1
2
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]

Constraints:

  • 0 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9
  • nums is a non decreasing array.
  • -10^9 <= target <= 10^9

More

Search in Rotated Sorted Array (LeetCode 33, 81, 153)

Given an integer array nums sorted in ascending order, and an integer target.

Suppose that nums is rotated at some pivot unknown to you beforehand (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

You should search for target in nums and if you found return its index, otherwise return -1.

Example 1:

1
2
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

Example 2:

1
2
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1

Example 3:

1
2
Input: nums = [1], target = 0
Output: -1

Constraints:

  • 1 <= nums.length <= 5000
  • -10^4 <= nums[i] <= 10^4
  • All values of nums are unique.
  • nums is guranteed to be rotated at some pivot.
  • -10^4 <= target <= 10^4

More

Hard-SVM, Soft-SVM 和 KKT

SVM 是机器学习在神经网络兴起前最经典、有效的算法。它的思想主要是用一个超平面对数据集进行划分,但是能够分开数据集的超平面一般都有无数个,支持向量机的做法是 “间隔最大化”,也就是选择 “支持向量” 到分割平面距离之和最大的,进而将问题转换为一个凸优化问题。

支持向量机根据数据集可分程度的不同分为:

  • 线性可分支持向量机:数据线性可分,硬间隔支持向量机
  • 线性(不可分)支持向量机:数据近似线性可分,软间隔支持向量机
  • 非线性支持向量机:数据线性不可分,核技巧 + 软间隔最大化

SVM 是一套完整的数据处理算法,核方法的引入使得它具有了对非线性数据的处理能力。具体的方式是将低维数据映射到高维,这样原来不可分的数据自然就可分了。比如假设两类数据点完全是均匀随机分布的,此时如果在平面内无论使用直线还是曲线都无法将它们分开,但假设我们有能力让某一类数据点全部脱离二维进入三维(此处可以想象桌子上散乱着小米和钢珠,你猛地用双手拍桌子,小米会跳起来进入第三维),那它们之间任意的平面都可以轻易将它们隔开。事实上,神经网络使用了类似的方法,感知机的中间隐层做的也是类似的事情。

本部分只介绍线性可分支持向量机和线性支持向量机。

More