数据集的构成
机器学习的数据:文件CSV
mysql不适合机器学习:
- 性能瓶颈,读取速度
- 格式不太符合机器学习要求数据的格式
读取工具:
- pandas:读取工具
- numpy:快的原因:把GIL锁释放了
一、 数据集的结构
可用数据集
scikit-learn的特点:
- 数据量较小
- 方便学习
kaggle特点:
- 大数据竞赛平台
- 80万科学家
- 真实数据
- 数据量巨大
UCI特点:
- 收录了360个数据集
- 覆盖科学、生活、经济等领域
- 数据量几十万
常用数据集的结构组成
结构:特征值+目标值
房子面积 | 房子位置 | 房子楼层 | 目标值 | |
---|---|---|---|---|
数据 | 80 | 9 | 3 | 80 |
注:有些数据集科研没有目标值
机器学习:数据中的重复值不需要去重
二、特征工程
将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性——特征工程
重要概念:
1. 数据的特征抽取(feature_extraction)
将一个文本、字符串转换成数字就是特征抽取
1.文本特征抽取
方式1(用得比较少):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
vector =CountVectorizer()
#调用fit_transform输入并转换数据
res = vector.fit_transform(["Life is short,I like python.","Life is long, I dislike python."])
#打印结构
print(vector.get_feature_names())
print(res.toarray())
结果输出:(单个字母不统计)
['dislike', 'is', 'life', 'like', 'long', 'python', 'short']
[[0 1 1 1 0 1 1]
[1 1 1 0 1 1 0]]
注意:中文不支持特征文本特征抽取,需要用到jieba分词。
使用:jieba.cut
例子:
import jieba
words = '我是一个好程序员'
#分词
words_cut = jieba.cut(words)
#将词转换成列表
con = list(words_cut)
#将列表转换成字符串并用空格隔开
c1 = " ".join(con)
print(c1)
我 是 一个 好 程序员
注意:传入文本特征抽取时候要加上[]。
res = vector.fit_transform([c1])
方式2 tf-idf分析
Tf: 词的频率 term frequency
idf:逆文档频率 inverse document frequency
log(总文档数量/该词出现的文档数量)
tf * idf 反映重要性程度
TF-IDF的主要思想是:如果某个词或者短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为该词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
类:sklearn.feature_extraction.text.TfidfVectorizer
-
TfidfVectorizer(stop_word=None,…)
返回词的权重矩阵 -
TfidfVectorizer.fit_transform(x)
x:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵 -
TfidfVectorizer.inverse_transform(x)
x:array数组或者sparse矩阵
返回值:转换之前数据格式 -
TfidfVectorizer.get_feaure_names()
返回值:单词列表
from sklearn.feature_extraction.text import TfidfVectorizer
tf = TfidfVectorizer()
data = tf.fit_transform(['life is short,i like python','life is long,i dislike python.'])
print(tf.get_feature_names())
print(data.toarray())
结果输出:(反映词的重要性)
['dislike', 'is', 'life',