机器学习4 - 数据和特征
知识点
- mysql:
- 性能瓶颈,读取速度不行。
- 格式不太符合机器学习要求数据的格式
- MongoDB:
- 读取速度还可,但是格式为json
- 大部分时候存在csv中。
- numpy释放了GIL(全局解释器锁):真正的多线程。计算能力强就是因为numpy的这个多线程工程。详解:https://www.jianshu.com/p/9eb586b64bdb
- 数据集来源:
- Kaggle:https://www.kaggle.com/datasets
- UCI: http://archive.ics.uci.edu/ml/
- 文本特征抽取
- count
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
import jieba
cv = CountVectorizer()
data = cv.fit_transform(['setence 1','sentence 2','sentence n']
print(cv.get_feature_names())
- 中文文本特征值化
def cutword():
content1 = jieba.cut('中文句子1')
content2 = jieba.cut('中文句子2')
content3 = jieba.cut('中文句子3')
#转换成列表
c1,c2,c3 = ' '.joinlist(content1),' '.join(list(content2)),' '.join(list(content3))
#把列表转换成字符串
return c1,c2,c3
def hanziVec():
c1,c2,c3 = cutword()
cv = CountVectorizer()
data = cv.fit_transform([c1,c2,c3])
print(cv.get_feature_names())
print(data.toarray())
return None
- TF-IDF:
TF: Term Frequency 词频,词出现的次数
IDF: Inverse Document Frequency 逆文档频率,log(总文档数量/该词出现的文档数量)
TF*IDF的主要思想:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。作用是用以评估一个词对于一个文件的重要程度。e.g.
sklearn.feature_extraction.text.TfidfVectorizer
tf = TfidfVectorizer(stop_words=None,....)
tf.fit_transform(X) #返回sparse矩阵
tf.inverse_transform(X) #返回转换前数据
tf.get_feature_names()
- 归一化:把不同特征的数量级压到一样,容易受异常值影响,鲁棒性较差,只适合传统精确小数据场景。
X ′ = x − m i n m a x − m i n X ′ ′ = X ′ ∗ ( m a x − m i n ) + m i n X' = \frac{x-min}{max-min} X'' = X'*(max-min)+min X′=max−minx−minX′′=X′∗(max−min)+min
mm = MinMaxScalar()
mm.fit_transform(X)
- 标准化:由于一定的数据量,少量的异常点对于均值的影响并不大,从而方差改变较小,加速收敛。
X ′ = X − μ σ X' = \frac{X-\mu}{\sigma} X′=σX−μ
sl = StandardScaler()
sl.fit_transform(X)
sl.mead_
sl.std_
在已有样本足够多的情况下比较稳定, 适合现代嘈杂大数据环境。
- 缺失值:
- 放弃整行或整列
- 取均值或者中位数来填补
Imputer(missing_values='NaN',startegy='mean',axis=0)
Imputer.fit_transform(X)
- 类别型:one-hot encoding
- 时间类型:时间的切分
- 特征选择:
- 过滤式: VarienceThreshold,卡方检验,互信息。
- 嵌入式: 正则化,决策树
- 包裹式
- Varience threshold删除低方差的特征
var = sklearn.feature_selection.VarianceThreshold
var.fit_transform(X)
- 主成分分析,降低数据维度并减少数据损失
sklearn.decomposition.PCA
pca = PCA(n_components=0.9)#保留百分之90的偏差
pca.fit_transform(X)
-
算法是核心,数据和计算是基础。大部分复杂模型的算法设计由算法工程师完成,我们一般需要做的是:
- 分析很多的数据
- 分析具体的业务
- 应用常见的算法
- 特征工程,调参数,优化
-
离散与连续:
- 离散型数据,计数数据,全是整数。区间内可分。
- 连续型数据,变量可以在某个范围内取任一值,变量取值连续。区间内不可分。
-
开发流程:
- 原始数据明确问题要做什么
- 数据基本处理
- 特征工程
- 找到合适算法进行预测
- 模型评估,判定效果
- 若模型评估没有通过,可以换算法,特征工程。若通过可以上线使用,以API形式提供
-
特征处理相关方法
- 数值型处理方法:
- 归一化
f n e w = f o l d f m a x − f m i n f_{new} = \frac{f_{old}}{f_{max}-f_{min}} fnew=fmax−fminfold - 离散化
- h θ ( x ) = 1 1 + e − θ x h_{\theta}(x) = \frac{1}{1+e^{-\theta x}} hθ(x)=1+e−θx1
- 等步长
- 等频
等频的离散化方法很精准,但需要每次都对数据分布做一次计算,因此需要每天更新。等步长固定,比较简单。都有应用。
- 归一化
- 类型特征处理:
- one-hot encoder
- label encoder
- 时间型特征:
可以看作连续值或者离散值。- 连续值:
- 持续时间
- 间隔时间
- 离散值:
- 一天中哪个时间段
- 一周中的星期几
- 一年中哪个月/星期
- 工作日/周末
- 连续值:
- 统计数据:
- 加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过多少。
- 分位线:商品属于售出商品价位的分位线处。
- 次序性:商品处于热门商品第几位。
- 比例类:电商中商品的好/中/差评比例。
- 数值型处理方法: