龙空技术网

三天快速入门python机器学习(二)建议收藏!

AI人工智能知识库 175

前言:

目前我们对“pythonshort”可能比较关注,各位老铁们都想要知道一些“pythonshort”的相关内容。那么小编在网络上汇集了一些有关“pythonshort””的相关文章,希望兄弟们能喜欢,兄弟们快快来了解一下吧!

特征工程(1)数据集可用数据集scikit-learnsklearn 数据集特征工程特征工程介绍特征提取字典特征提取文本特征提取方法一:CountVectorizer方法二: TfidfVectorizer

如果需要获取到【机器学习从入门到实战全套学习笔记、源码】的话帮忙转发、转发、转发一下然后再关注我私信回复“ 666 ”得到获取方式吧!

多多关注小编,持续分享编程学习干货!

数据集

可用数据集

Kaggle:

网址:

特点:大数据竞赛平台;80万科学家;真实数据;数据量巨大

UCI:

网址:

特点:收录360个数据集;覆盖科学、生活、经济等领域等领域;数据量几十万

scikit-learn:

网址:

scikit-learn

介绍scikit-learn中文社区: 语言的机器学习工具scikit-learn 包括许多知名机器算法的实现文档完善,易上手,丰富的API目前稳定版本 0.19.1

内容

sklearn 数据集

1、sklearn 数据集API介绍

sklearn.datasets.load_*()用于获取小规模数据集,数据包含在datasets里sklearn.datasets.fetch_*(data_home=None)获取大规模数据集,需从网络上下载,函数的第一个参数是data_home,表示数据下载的目录,不指定的话默认~/scikit_learn_data/

2、sklearn小数据集

举例:

sklearn.datasets.load_iris()加载并返回鸢尾花数据集sklearn.datasets.load_boston()加载并返回波斯顿房价数据集

3、sklearn大数据集

sklearn.datasets.fetch_20newsgroups(data=None, subset=‘train’)subset:‘train’或者’test’,‘all’,可选,选择要加载的数据集训练集选‘train’,测试集选’test’,两者的‘all’

4、sklearn数据集的使用

load和fetch返回的数据类型为datasets.base.Bunch(字典格式)键值对:data:特征数据数组,是[n_samples * n_features]的二维numpy.ndarry数组target:标签数组,是n_samples的一维numpy.ndarry数组DESCR:数据描述feature_names:特征名,新闻数据,手写数字、回归数据集没有target_names:标签名两种获取键值对的方式:dict[‘‘key’’]=value 和 bunch.key=value

from sklearn.datasets import load_irisdef datasets_demo():"""sklearn数据集使用:return:"""# 获取数据集iris = load_iris()print("鸢尾花数据集:\n", iris)print("查看数据集描述:\n", iris["DESCR"])print("查看特征值的名字:\n", iris.feature_names)print("查看特征值:\n", iris.data, iris.data.shape) # shape:(150,4)return Noneif __name__ == "__main__":datasets_demo()

5、数据集的划分

机器学习一般的数据集会划分为两个部分:训练数据:用于训练,构建模型测试数据:模型检验,评估模型是否有效划分比例:训练集:80%~70%测试集:20%~30%

6、数据集划分api:

sklearn.model_selection.train_test_split(arrays, options)

x 数据集的特征值 ; y 数据集的标签值test_size测试集的大小,一般为float,不设定则按默认值random_state 随机数种子,不同的种子会造成不同的随机采样结果 , 相同的种子采样结果相同。return 训练集特征值 x_train,测试集特征值 x_test,训练集目标值 y_train,测试集目标值 y_test

from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitdef datasets_demo():"""sklearn数据集使用:return:"""# 获取数据集iris = load_iris()print("鸢尾花数据集:\n", iris)print("查看数据集描述:\n", iris["DESCR"]) #字典方式获取键值对print("查看特征值的名字:\n", iris.feature_names) #点属性方式获取键值对print("查看特征值:\n", iris.data, iris.data.shape) # 150个样本# 数据集划分x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)print("训练集的特征值:\n", x_train, x_train.shape) # 返回为150*0.8=120个样本return Noneif __name__ == "__main__":datasets_demo()

代码运行

我使用的是Anaconda(CSND上搜索安装教程),Anaconda是包管理器和环境管理器,里面附带了大批常用科学数据包,包括我们所要学习的sklearn数据集安装好之后进入Anaconda,点击Jupyter下方的luanch点击New里面的Python3将代码复制进去,然后点击运行就可以得到数据集

特征工程特征工程介绍

定义:特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

意义:特征工程会直接影响机器学习的效果。数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

特征工程的位置与数据处理的比较

pandas:一个数据读取非常方便以及基本的处理格式的工具(数据清洗、数据处理)sklearn:对于特征的处理提供了强大的接口(特征工程)特征工程包含内容:特征抽取(或提取);特征预处理;特征降维

特征提取

定义:将任意数据(如文本或图像)转换为可用于机器学习的数字特征

注:特征值是为了计算机更好的去理解数据

字典特征提取(特征离散化)文本特征提取图像特征提取(深度学习再详细讲)

特征提取API: sklearn.feature_extraction

字典特征提取

作用:对字典数据进行特征值化

sklearn.feature_extraction.DictVectorizer(sparse=True, …)

DictVectorizer.fit_transform(X), X:字典或者包含字典的迭代器返回值,返回sparse矩阵DictVectorizer.inverse_transform(X), X:array数组或者sparse矩阵 返回值:转换之前数据格式DictVectorizer.get_feature_names():返回类别名称

应用

字典特征提取:将类别转换为one-hot编码,节省内存,提高下载效率

from sklearn.feature_extraction import DictVectorizer# 特征提取def dict_demo():"""字典特征抽取:return:"""data = [{'city':'北京', 'temperature':100},{'city':'上海', 'temperature':60},{'city':'深圳', 'temperature':30}]# 1、实例化一个转换器类transfer = DictVectorizer(sparse=False)# 如果是True则返回sparse矩阵(稀疏矩阵)会将非零值按位置表示,节省内存,提高加载效率# 2、调用fit_transform()data_new = transfer.fit_transform(data)print("data_new:\n", data_new) # 转化后的print("特征名字:\n", transfer.get_feature_names())return Noneif __name__ == "__main__":dict_demo()

运行得到:

data_new:[[ 0. 1. 0. 100.][ 1. 0. 0. 60.][ 0. 0. 1. 30.]]特征名字:['city=上海', 'city=北京', 'city=深圳', 'temperature']

应用场景

数据集当中类别特征比较多:将数据集的特征转化为字典类型,用 DictVectorizer 进行特征抽取本身拿到的数据就是字典类型

文本特征提取

作用:对文本数据进行特征值化,一般用单词作为特征

方法一:CountVectorizer

API

sklearn.feature_extraction.text.CountVectorizer(stop_words=[])

返回词频矩阵,stop_words:停用词,

CountVectorizer.fit_transform(X)X:文本或者包含文本字符串的可迭代对象,返回值:返回sparse矩阵CountVectorizer.inverse_transform(X)X:array数组或者sparse矩阵,返回值:转换之前数据格CountVectorizer.get_feature_names()返回值:单词列表

英文文本特征提取

from sklearn.feature_extraction.text import CountVectorizer# 导入转换器类def count_demo():"""文本特征抽取:CountVectorizer:return:"""data = ['life is short,i like like python','life is too long,i dislike python']# 1、实例化一个转换器类# transfer = CountVectorizer(stop_words=["is","too"]) 使用停用词,将不计入该词transfer = CountVectorizer()# 2、调用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray())# toarray:将sparse转换为二维数组print("特征名字:\n", transfer.get_feature_names())return Noneif __name__ == "__main__":count_demo()

运行结果

data_new:[[0 1 1 2 0 1 1 0][1 1 1 0 1 1 0 1]]特征名字:['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

中文文本特征提取

手动分词

from sklearn.feature_extraction.text import CountVectorizerdef count_Chinese_demo():"""中文文本特征抽取:CountVectorizer手动分词:return:"""data = ['我 爱 北京 天安门','天安门 上 太阳 升']# 1、实例化一个转换器类transfer = CountVectorizer()# 2、调用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray()) # toarray:转换为二维数组print("特征名字:\n", transfer.get_feature_names())return Noneif __name__ == "__main__":count_demo()

运行结果

data_new: [[1 1 0] [0 1 1]]特征名字: ['北京', '天安门', '太阳']12345
jieba分词处理(自动分词)
from sklearn.feature_extraction.text import CountVectorizerimport jieba #导入jieba库def count_chinese_demo2():'''中文文本特征提取'''data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。','我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。','如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']data_new=[]for sent in data:data_new.append(cut_word(sent))transfer=CountVectorizer() #可加stop_worddata_final=transfer.fit_transform(data_new)print('data_final=\n',data_final.toarray())print('特征名字:\n',transfer.get_feature_names())return Nonedef cut_word(text):'''进行中文分词'''a=' '.join(list(jieba.cut(text)))print(a)return aif __name__=="__main__":count_chinese_demo2()

运行结果

一种 还是 一种 今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。如果 只用 一种 方式 了解 某件事 物 , 他 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。data_final=[[2 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 10][0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 01][1 1 0 0 4 2 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 00]]特征名字:['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某件事', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '还是', '这样']

关键词:在某一类别的文章中,出现次数很多,但在其他类别的文章中出现很少

方法二: TfidfVectorizer

重要性:分类机器学习算法进行文章分类中前期数据处理方式

API:类比CountVectorizer的APITF_IDF文本特征提取TF-IDF:衡量特征词的重要程度主要思想:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。词频(term frequency,TF):某给定词语在文中出现的频率逆向文档频率(inverse document frequency,IDF):词语普遍重要性的度量。

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizerimport jiebadef tfidf_demo():"""用TF-IDF的方法进行文本特征抽取:return:"""data = ['今天很残酷,明天更残酷,后天很美好,但绝大部分是死在明天晚上,所以每个人不要放弃今天。','我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。','如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']data_new = []for sent in data:data_new.append(cut_word(sent))print(data_new)# 1、实例化一个转换器类transfer = TfidfVectorizer()# 2、调用fit_transformdata_final = transfer.fit_transform(data_new)print("data_final:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return Nonedef cut_word(text):'''进行中文分词'''a=' '.join(list(jieba.cut(text)))print(a)return aif __name__ == "__main__":tfidf_demo()

运行结果

今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。如果 只用 一种 方式 了解 某件事 物 , 他 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。['今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某件事 物 , 他 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']data_final:[[0. 0. 0.2236068 0. 0. 0.0.4472136 0. 0. 0. 0. 0.0.2236068 0. 0. 0. 0. 0.0.2236068 0.2236068 0. 0.4472136 0. 0.22360680. 0.4472136 0.2236068 0. 0. 0.0.2236068 0.2236068 0. 0. 0. ][0. 0. 0. 0.2410822 0. 0.0. 0.2410822 0.2410822 0.2410822 0. 0.0. 0. 0. 0. 0.2410822 0.550047690. 0. 0. 0. 0.2410822 0.0. 0. 0. 0.48216441 0. 0.0. 0. 0. 0.2410822 0.2410822 ][0.16765125 0.16765125 0. 0. 0.670605 0.33530250. 0. 0. 0. 0.16765125 0.167651250. 0.16765125 0.16765125 0.16765125 0. 0.12750310. 0. 0.16765125 0. 0. 0.0.16765125 0. 0. 0. 0.3353025 0.167651250. 0. 0.16765125 0. 0. ]]特征名字:['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某件事', '残酷', '每个', '看到', '真正', '秘密', '绝大部分', '美好', '联系', '过去', '这样']
data_new:[[ 0. 1. 0. 100.][ 1. 0. 0. 60.][ 0. 0. 1. 30.]]特征名字:['city=上海', 'city=北京', 'city=深圳', 'temperature']

如果需要获取到【机器学习从入门到实战全套学习笔记、源码】的话帮忙转发、转发、转发一下然后再关注我私信回复“ 666 ”得到获取方式吧!

多多关注小编,持续分享编程学习干货!

标签: #pythonshort