Scikit-learn工具介绍:
sklearn数据集使用:
scikit-learn数据集API介绍:
- sklearn.datasets
- 加载获取流行数据集
- datasets.loas_*()
- 获取小规模数据集,数据包含在datasets里
- datasets.feth_*(data_home=None)
- 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是~/scikit_learn_data/
- 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是~/scikit_learn_data/
加载scikit-learn数据集:
具体演示:
单击上面的文件,进行修改底层源码,不修改底层也可以,只不过就是一直有这个警告信息:
了解鸢尾花数据集:
- 思考:拿到的数据是否全部都用来训练一个模型?
数据集的划分
机器学习一般的数据集会划分为两个部分:
- 训练数据:用于训练,构建模型
- 测试数据:在模型检验时使用,用于评估模型是否有效
划分比例:
- 训练集:70% 80% 75%
- 测试集:30% 20% 30%
数据划分api
- sklearn.model_selection.train_test_split(arrays,*options)
- x数据集的特征值
- y数据集的标签值
- test_size测试集的大小,一般为float
- random_state随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
- return训练集特征值,测试集特征值,训练集目标值,测试集目标值
具体演示
前面查看数据集的时候我们知道总共有150个样本,由于在代码中指定的割切比例为0.2,所以,测试集为1500.2=30 训练集为 1500.8=120
- 提示:设置随机数种子的目的是为了验证同一个数据集在不同模型下对比验证模型的优劣,这样才公平公允。
- 提示:通过查看源码我们知道,默认是0.25的割切比例。
测试随机种子参数:
总结:
特征工程:
- 数据集
- 可用数据集
- 公司内部 百度
- 数据接口 花钱
- 数据集
- 学习阶段可以用的数据集:
- sklearn
- kaggle
- UCI
- Scikit-learn工具介绍
- sklearn数据集
- sklearn.datasets
- load_* 获取小规模数据集
- detch_* 获取大规模数据集
- sklearn小数据集
- sklearn.datasets.load_iris()
- sklearn大数据集
- sklearn.datasets.fetch_20newsgroups(data_home=None)
- 数据集的返回值
- datasets.base.Bunch(继承自字典)
- dict[“key”] = values
- bunch.key = values
- datasets.base.Bunch(继承自字典)
- sklearn小数据集
- sklearn.datasets
- 可用数据集
特征工程介绍:
为什么需要特征工程():
什么是特征工程:
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
- 意义:会直接影响机器学习的效果。
特征工程的位置与数据处理的比较:
特征工程包含内容
- 特征抽取
- 特征预处理
- 特征降维
什么是特征提取:
将任意数据(如文本或图像)转换为可用于机器学习的数字特征。
字典特征抽取DictVectorizer:
案例:对字典数据进行特征提取。
- 准备数据
data = [
{“city”: “北京”, “temperature”: 100},
{“city”: “上海”, “temperature”: 60},
{“city”: “深圳”, “temperature”: 30},
]
- 注意:调用fit_transform()得到特征提取的结果。
- 注意:返回sparse稀疏矩阵,大家估计现在还看不明白这个稀疏矩阵是什么意思,稍后我们再进行介绍。
- 将参数sparse=False,可返回ndarray二维矩阵。
- 默认情况下sparse=True:返回sparse稀疏矩阵。
查看返回的数据形状:不管是sparse稀疏矩阵还是ndarray二维数组都是3行4列的。
再来获取返回的类别名字:
- 也就是总共提取了4个特征:分别是city=上海,city=北京,city=深圳,temperature这4个特征,那现在我们可以来解释一下sparse稀疏矩阵和ndarray二维矩阵所表达的意义
先来解释稀疏矩阵所表达的意义:稀疏矩阵将非零值按位置表示出来,好处:节省内存,提高加载效率。
总共有3个字典,4个特征:(0,0)位置是表示第一个字典的city=上海这个特征,由于第一个字典的city=北京,所以(0,0)这个位置的值为0,因为0值就不表示出来了,所以返回的sparse稀疏矩阵没有这个位置以及这个位置的值。(0,1)位置是表示第一个字典的city=北京这个特征,由于第一个字典的city=北京,所以(0,1)这个位置的值为1.0,是浮点类型的。(0,2)位置是表示第一个字典的city=深圳这个特征。(0,3)位置是表示第一个字典的temperature这个特征,它的值是100。依此类推,第二个字典,第三个字典也是如此。
再来解释ndarray二维矩阵所表达的意义:二维矩阵里面有三个一维数组这三个一维数组分别表示这3个字典数据,每个一维数组里面都有4个元素,分别表示这4个特征,字典数据中有这个特征的就表示为1或是具体的值,没有的就表示为0。
之前在学习pandas中的离散化的时候也实现了类似的效果,我们把这个处理数据的技巧叫做“one-hot”编码(为每个类别生成一个布尔列,这些列中只有一列可以为每个样本取值为1,因此,专业术语也叫做热编码)。
将稀疏矩阵转换为原数据:
将one-hot编码的ndarray二维数组转换为原数据:
也可以调用toarray()方法进行将稀疏矩阵转换为ndarray矩阵:
总结:对于特征当中存在类别信息的我们都会做one-hot编码处理。
文本特征抽取方法1:CountVectorizer。
案例:对英文数据进行特征提取。
流程分析:
具体演示:
- 准备数据
data = [“life is short, i like like python”, “life is too long, i dislike python”]
- 注意:使用fit_transform()得到文本特征抽取的结果。
- 错误提示信息为:没有sparse关键字参数,这是CountVectorizer比较特殊的地方。
调用toarray()方法得到ndarray二维矩阵:
获取返回的类别名字:
- 注意:英文时不对某个字母进行特征提取。
中文文本特征抽取:CountVectorizer:
- 准备数据
data = [“我爱北京天安门”, “天安门上太阳升”]
为什么会得到这样的结果呢?
仔细分析之后会发现英文默认是以空格分开的,其实这样就达到了一个分词的效果,所以,我们要对中文进行分词处理。
- 手动去分词太傻,而且也不符合我们写文章的习惯。
在进行中文分词之前,我们先注意一下事项:
同理:英文也是,不对单个字进行特征提取。
- 总结:我们发现中文时不对某一个字进行特征提取,而英文时不对某个字母进行特征提取。
- 前面是对所有的单词进行统计的,我们也可以从网上去搜索一些停用词,网上有很多的。
不对停用词进行特征提取:
jieba分词处理:
案例:对三段文字进行特征提取。
- 准备数据
data = [
“一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。”,
“我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。”,
“如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。”
]
先来进行分词:
再进行特征提取:
(常用)文本特征抽取方法2:TfidfVevtorizer。
Tf-idf文本特征提取:
公式:最终得出结果可以理解为对于分类的重要程度。
上面想要表达的是:现在有1000个文章,非常这个词在100个文章中出现过,经济这个词在10个文章中出现过,那么根据公式进行计算:
tf表示词频:词语在文章中出现的频率。
idf表示逆向文档频率:由总文件数目除以包含该词语的文件数目,再将得到的商取以10为底的对数。
上面的lg 1000/10 = 2就是表示以10为底的对数,相当于log 10 1000/10也就是log 10 100也就是10的几次幂是100,也就是10的平方是100,也就是2,那么它的idf的值为0.2了。
上面是解释对数和log 10(也就是以10为底的对数)的数字关系。
那么“经济”这个词是对分类来说起到了更为重要的影响,是更具有分类意义的词。
API手册:
案例:对前面的案例进行tfidf方式特征提取。
解释:特征提取的结果为3行35列,3行是因为我们有3段文字,35列是因为总共提取了35个特征,特征提取结果的二维数组中的第一个一维数组所表达的意思是第一段文字中对于提取的特征进行计算的结果,值越大对分类越有影响。
总结:Tf-idf的重要性。
分类机器学习算法进行文章分类中前期数据处理方式。