目录
可用数据集
scikit-learn
kaggle
UCI
数据集的结构包括 特征值+目标值
机器学习中,数据中有重复值不需要去重
特征工程
原始数据转换为更好地代表预测模型的潜在问题的特征的过程,提高预测准确性
数据的特征抽取
对文本等数据进行特征值化
sklearn是python一个库
import sklearn
sklearn.feature_extraction 特征抽取API
对字典数据进行特征值化
sklearn.feature_extraction.DictVectorizer
DictVectorizer(spqrse=True,...)
DictVectorizer.fit_transform(X)
X:字典或者包含字典的迭代器
返回值:返回sparse矩阵
DictVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前的数据格式
DictVectorizer.get_feature_names()
返回类别名称
DictVectorizer.transform(X)
按照原先的标准转换
可以使用 from sklearn.feature_extraction import DictVectorizer 导入
把字典中一些类别的数据,分别进行转换成特征;一些数值类型的数据,直接转换为数据
数组形式,有类别的这些特征,先要转换为字典数据
DictVectorizer(spqrse=False) 得到的是one-hot编码,把字典中类别的数据转换为one-hot编码,利于分析
文本特征抽取
对文本数据进行特征值化
sklearn.feature_extraction.text.CountVectorizer
CountVectorizer()
返回词频矩阵
CountVectorizer.fit_transform(X)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前的数据格式
CountVectorizer.get_feature_names()
返回单词列表
可以使用 from sklearn.feature_extraction.text import CountVectorizer 导入
CountVectorizer()里面没有sparse,所以可以使用.toarray()实现该效果
统计文中所有词,重复的只看作一次,生成词的列表,然后对每篇文章,在词的列表里面统计每个词出现次数。单个字母不统计
文本特征抽取:Count
因为分词默认是以逗号或者空格分词,所以对于一句中文,只能识别为一个词,使用jieba分词解决该问题
import jieba
jieba.cut("中文句子")
返回值:词语生成器
con1=jieba.cut("中文") #分词
content1=list(con1) #转换为列表
c1=' '.join(content1) #把列表转换为字符串并以空格分开
单个汉字不会被统计
TfidfVectorizer
TfidfVectorizer(stop_words=None,...)
返回词的权重矩阵
TfidfVectorizer.fit_transform(X)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
TfidfVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵
返回值:转换之前的数据格式
TfidfVectorizer.get_feature_names()
返回单词列表
可以使用 from sklearn.feature_extraction.text import TfidfVectorizer 导入
tf:term frequency idf:逆文档频率 inverse document frequency
tf 词出现的次数
log(总文档数量/该词出现的文档数量)
tf*idf 该值越高,词的重要性越大
tf idf相比于上两种方式要好
数据的特征预处理
通过特定的统计方法,将数据转换成算法要求的数据
数值型数据:标准缩放:
1.归一化 2.标准化 3.缺失值
类别型数据:one-hot编码
时间类型:时间的切分
sklearn特征处理API sklearn.preprocessing
归一化
几个特征同等重要的时候,进行归一化,使得各个特征不会对最终结果造成更大的影响
通过对原始数据变换把数据映射到0-1之间
公式:
作用于每一列,max为一列的最大值,min为一列的最小值,那么为最终结果,mx mi分别为指定区间值,默认mx为1,mi为0
sklearn归一化API:sklearn.preprocessing.MinMaxScaler
MinMaxScaler(feature_range=(0,1)...) 每个特征缩放到给定范围(默认0-1)
MinMaxScaler.fit_trasform(X)
x:numpy array格式的数据 [n_samples,n_features]
返回值:转换后的形状相同的array
归一化缺点:如果有异常点,容易影响最大值最小值,鲁棒性不好,不稳定,只适合传统精确小数据场景
标准化
对原数据进行转换,把数据变到均值为0,方差为1的范围内
公式:
作用于每一列,mean平均值,标准差
sklearn标准化API:sklearn.preprocessing.StandardScaler
StandardScaler(...)
处理之后每列所有数据都聚集在均值0附近,标准差为1
StandardScaler.fit_transform(X)
x:numpy array格式的数据[n_samples,n_features]
返回值:转换后形状相同的array
StandardScaler.mean_
原始数据中每列特征的平均值
StandardScaler.std_
原始数据中每列特征的方差
少量异常点对平均值和方差影响小,在样本足够多的情况下比较稳定,适合现代嘈杂大数据场景
缺失值
删除或者插补
插补更常用:常按特征值列的平均值、中位数填补
Imputer(missing_values='NaN',strategy='mean',axis=0) axis=0是按列,1按行
完成缺失值插补
Imputer.fit_transform(X)
x:numpy array格式的数据[n_samples,n_features]
返回值:转换后形状相同的array
注意