1 数据集
scikit-learn数据集API
sklearn.datasets
加载获取流行数据集
datasets.load_*()
获取小规模数据集,数据包含在datasets里
例如:sklearn.datasets.load_iris() 加载并返回鸢尾花数据集
datasets.fetch_*(data_home=None)
获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/
例如:sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
subset:‘train’或者’test’,‘all’,可选,选择要加载的数据集。
训练集的“训练”,测试集的“测试”,两者的“全部”
sklearn数据集返回值
load和fetch返回的数据类型datasets.base.Bunch(字典格式)
data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
DESCR:数据描述
feature_names:特征名,新闻数据,手写数字、回归数据集没有
target_names:标签名
from sklearn.datasets import load_iris
# 获取鸢尾花数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
# 返回值是一个继承自字典的Bench
print("鸢尾花的特征值:\n", iris["data"])
print("鸢尾花的目标值:\n", iris.target)
print("鸢尾花特征的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_names)
print("鸢尾花的描述:\n", iris.DESCR)
seaborn介绍
Seaborn 是基于 Matplotlib 核心库进行了更高级的 API 封装,可以让你轻松地画出更漂亮的图形。而 Seaborn 的漂亮主要体现在配色更加舒服、以及图形元素的样式更加细腻。
seaborn.lmplot() 是一个非常有用的方法,它会在绘制二维散点图时,自动完成回归拟合
sns.lmplot() 里的 x, y 分别代表横纵坐标的列名,
data= 是关联到数据集,
hue=*代表按照 species即花的类别分类显示,
fit_reg=是否进行线性拟合。
数据集划分api
sklearn.model_selection.train_test_split(arrays, *options)
x 数据集的特征值
y 数据集的标签值
test_size 测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
return 训练集特征,测试集特征,训练标签,测试标签(默认随机取)
2 特征归一化
最大最小值归一化api
sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
MinMaxScalar.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array
标准化api
sklearn.preprocessing.StandardScaler( )
处理之后每列来说所有数据都聚集在均值0附近标准差差为1
StandardScaler.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array
3 特征提取
定义:将任意数据(如文本或图像)转换为可用于机器学习的数字特征
特征提取api:sklearn.feature_extraction
字典特征提取
作用:对字典数据进行特征值化
sklearn.feature_extraction.DictVectorizer(sparse=True,…)
DictVectorizer.fit_transform(X)
X:字典或者包含字典的迭代器返回值
返回sparse矩阵
DictVectorizer.get_feature_names() 返回类别名称
示例:
from sklearn.feature_extraction import DictVectorizer
def dict_demo():
"""
对字典类型数据进行特征抽取
:return:
"""
data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]
# 实例化一个转换器
transfer = DictVectorizer(sparse=False)
# 调用fit_transform
data = transfer.fit_transform(data)
print('返回的结果:\n', data)
print('特征名称:\n', transfer.get_feature_names())
文本特征提取
对文本数据进行特征值化
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
返回词频矩阵
CountVectorizer.fit_transform(X)
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
CountVectorizer.get_feature_names() 返回值:单词列表
sklearn.feature_extraction.text.TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
def english_count_text_demo():
"""
文本特征提取 -- 英文
:return: NOne
"""
data = ["life is is short,i like python",
"life is too long,i dislike python"]
# 1.实例化
transfer = CountVectorizer(stop_words=["dislike"])
# 2.调用fit_transform
transfer_data = transfer.fit_transform(data)
print('返回特征名称:\n', transfer.get_feature_names())
print('文本特征抽取结果:\n', transfer_data.toarray())
from sklearn.feature_extraction.text import CountVectorizer
def chinese_count_text_demo1():
"""
文本特征提取 -- 中文
:return: NOne
"""
data = ["人生 苦短, 我 喜欢 Python",
"生活 太长久, 我 不 喜欢 Python"]
# 1.实例化
transfer = CountVectorizer()
# 2.调用fit_transform
transfer_data = transfer.fit_transform(data)
print('返回特征名称:\n', transfer.get_feature_names())
print('文本特征抽取结果:\n', transfer_data.toarray())
从结果可以看出该方法不支持单个中文字,所以要对中文进行分词处理。
jieba分词处理
jieba.cut()
返回词语组成的生成器
from sklearn.feature_extraction.text import CountVectorizer
import jieba
# jieba分词处理
def cut_word(sen):
"""
中文分词
:return: sen
"""
# print(" ".join(list(jieba.cut(sen))))
return " ".join(list(jieba.cut(sen)))
def chinese_count_text_demo2():
"""
文本特征提取 -- 中文
:return: NOne
"""
data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
list = []
for temp in data:
# print(temp)
list.append(cut_word(temp))
print(list)
# 1.实例化
transfer = CountVectorizer(stop_words=["一种", "还是"])
# 2.调用fit_transform
transfer_data = transfer.fit_transform(list)
print('特征名称:\n', transfer.get_feature_names())
print('文本特征抽取结果:\n', transfer_data.toarray())
cut_word('我喜欢你中国')
chinese_count_text_demo2()
Tf-idf文本特征提取
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到
from sklearn.feature_extraction.text import TfidfVectorizer
def tfidf_text_demo():
"""
文本特征提取 -- 中文
:return: NOne
"""
data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
list = []
for temp in data:
list.append(cut_word(temp))
print(list)
# 1.实例化
transfer = TfidfVectorizer()
# 2.调用fit_transform
transfer_data = transfer.fit_transform(list)
print('特征名称:\n', transfer.get_feature_names())
print('文本特征抽取结果:\n', transfer_data.toarray())