数据集
Sklearn
load 小数据集
sklearn.datasets.load_iris()
fetch 大数据集
我们在使用sklearn的train_test_split函数随机划分数据集生成training set 于test set时,在函数train_test_split中有一个参数为random_state。
对于数据集的拆分,它本质上也是随机的,设置不同的随机状态(或者不设置random_state参数)可以彻底改变拆分的结果。
固定random_state后,每次构建的模型是相同的、生成的数据集是相同的、每次的拆分结果也是相同的。
Sklearn 特征工程
Pandas 数据清洗,数据处理
特征抽取/特征提取
机器学习算法 - 统计方法 - 数学公式
文本类型 -> 数值
类型 -> 数值
sklearn.feature_extraction
sklearn.feature_extraction.DictVectorizer(sparse=True,…)
sparse=True 转换为稀疏矩阵 表示的矩阵的非0的位置 节省内存 提高加载效率
第0行第1列为1 第2行第3列为30
将特征转化为矩阵/向量/二维数组
注意:应该是.get_feature_names_out()
不同的城市类别 -> one-hot编码(缺点:0会非常多 占内存)
每一行 北京为1 对应的温度为100 其余为0 用来表示第一个字典特征
应用场景:
1)pclass, sex 数据集当中类别特征比较多
1、将数据集的特征 -> 字典类型
2、DictVectorizer转换
2)本身拿到的数据就是字典类型
文本特征提取
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
stop_words停用的 将不想参与提取的词放进来
可上网搜停用词表
统计每个样本特征词出现的个数
def count_demo():
data = ["life is short,i like like python", "life is too long,i dislike python"]
transfer = CountVectorizer()
data_new = transfer.fit_transform(data)
print(data_new.toarray())
print(transfer.get_feature_names_out())
return None
.toarray()就可以将稀疏矩阵转成二维矩阵
如果data是中文呢?
为什么会得到这样的结果呢,仔细分析之后会发现英文默认是以空格分开的。其实就达到了一个分词的效果,所以我们要对中文进行分词处理
通过jieba库分词
import jiaba
def cut_word(text):
return " ".join(jieba.cut(text))
怎样更有利于分类?关键词
关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少
Tf-IDF 一个词的重要程度
sklearn.feature_extraction.text.TfidfVectorizer(stop_words=[])
特征预处理
归一化
sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
(feature_range=(0,1) 是指归一化落到的范围
如果异常值为最大值和最小值 则影响较大
标准化
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
sklearn.preprocessing.StandardScaler( )
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
特征降维:降低不是2维,3维的维度,降低的是特征的个数
降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程
- 降低随机变量的个数
- 相关特征(correlated feature)
- 相对湿度与降雨量之间的相关
- 等等
正是因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测会影响较大
特征选择
过滤式
方差选择法:一组数据方差小,说明都具备相似的特征,分辨不出来,则过滤掉
sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
threshold设定方差的阈值 小于threshold的就过滤掉
相关系数:特征与特征之间的相关程度
pearsonr( ) 返回两个值
第一个是相关系数 绝对值靠近1越相关,越靠近0越不相关
第二个是p-value:p值越小,表示相关系数越显著,一般p值在500个样本以上时有较高的可靠性
特征与特征之间相关性很高:
1)选取其中一个
2)加权求和
3)主成分分析
主成分分析
sklearn.decomposition.PCA(n_components=None)
注意n_components是给小数还是整数