机器学习(数据集的组成、特征⼯程、特征抽取、特征预处理、数据降维)⼀.什么是机器学习及其⽬的
机器学习是从数据中⾃动分析获得规律(模型),并利⽤规律对未知数据进⾏预测。
⽬的:让机器学习程序替换⼿动的步骤,减少企业的成本也提⾼企业的效率。
⼆.数据集的构成
1.历史数据的格式
机器学习的数据:⽂件csv。
不存在Mysql:因为存在性能瓶颈(数据⼤的时候,读取速度受限),格式不太符合机器学习要求的数据格式。
Pandas(读取⼯具):处理计算速度⾮常快,numpy释放了GIL,真正的多线程。
2.数据集的结构
(1)可⽤的数据集
kaggle特点:⼤数据竞赛平台,80万科学家,真实数据,数据巨⼤。
UCI特点:收录了360个数据集,覆盖了科学、⽣活、经济等领域,数据量⼏⼗万。
scikit-learn:数据量⼩,⽅便学习。
(2)常⽤数据集数据的结构组成
结构:特征值+⽬标值
(3)数据中对于特征值的处理
pandas:⼀个数据读取⾮常⽅便以及基本的处理格式的⼯具。机器学习中不需要进⾏去重复值。
sklearn:对于特征处理提供了强⼤的接⼝。
三.特征⼯程
数据预处理——>特征⼯程——>机器学习——>模型评估
1.特征⼯程
特征⼯程:将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从⽽提⾼了对未知数据的预测准确性。
特征⼯程的意义:直接影响预测结果。
sklearn库:scikit-learn import sklearn 导⼊ skearn 包
2.特征抽取
(1)特征抽取
特征抽取对⽂本等数据进⾏特征值化。
sklearn特征抽取API:sklearn.feature_extraction。
字典特征抽取作⽤:对字典数据进⾏特征值化。
类:sklearn.feature_extraction.DictVectorizer
DictVectorizer 语法:
DictVectorizer(sparse = True,…)
DictVectorizer.fit_transform(x):x是字典或者包含字典的迭代器,返回sparse矩阵。
DictVectorizer.inverse_transform(x):x是array数组或者sparse矩阵,返回值为转换之前数据格式。
<_feature_names():返回类别名称。
from sklearn.feature_extraction import DictVectorizer
def dictver():
"""
字典数据抽取
return: None
"""
# 实例化
dict= DictVectorizer(sparse=False)
# 调⽤fit_transform⽅法
data =dict.fit_transform([{'city':'北京','temperature':70},
{'city':'上海','temperature':80},
{'city':'成都','temperature':60}])
# 特征值化后的数据
print(data)
# 转换为之前的数据格式
print(dict.inverse_transform(data))
# 获得类别名称
_feature_names())
return None
if __name__ =="__main__":
dictver()
运⾏结果如下图所⽰:
为每⼀个类别⽣成布尔列,这些列中只有⼀列可以为每个样本取值。
one-hot编码的布尔矩阵
Sample Human Penguin Qctopus Alien 11000
21000
30100
40010
50001
60010
70001(2)⽂本特征抽取
作⽤:对⽂本数据进⾏特征值化
类:sklearn.CountVectorizer
CountVectorizer 语法:
CountVectorizer():返回词频矩阵
CountVectorizer.fit_transform(x):x是⽂本或者包含⽂本字符串的迭代器,返回sparse矩阵。
CountVectorizer.inverse_transform(x):x是array数组或者sparse矩阵,返回值为转换之前数据格式。
<_feature_names():返回单词列表。
from sklearn. import CountVectorizer
def countvec():
"""
对⽂本进⾏特征值化
return:None
"""
# 实例化
cv = CountVectorizer()
# 调⽤fit_transform⽅法
data = cv.fit_transform(["life is short, I like python, life is too long, I dislike pyhton"])
_feature_names())# 统计所有⽂章所有的词,重复的只看做⼀次
array())# 对每篇⽂章,在词的列表⾥⾯进⾏统计每个词出现的次数,单个的字母不统计
return None
if __name__ =="__main__":
countvec()
运⾏结果如下图所⽰:
jieba分词:下载pip install jieba,使⽤import jieba
jieba.cut(“今天的天⽓真好”) 返回值:词语⽣成器。
案例:对句⼦进⾏特征值化(“爱好读书,就能把⽆聊的时刻变成喜悦的时刻。⽣活不是⼀场赛跑,⽣活是⼀场旅⾏,要懂得好好欣赏每⼀段的风景。按照⾃⼰的意志去做,不要听那些闲⾔碎语,你就⼀定会成功。”)
con2 = jieba.cut("⽣活不是⼀场赛跑,⽣活是⼀场旅⾏,要懂得好好欣赏每⼀段的风景。")
con3 = jieba.cut("按照⾃⼰的意志去做,不要听那些闲⾔碎语,你就⼀定会成功。")
# 转换成列表
content1 =list(con1)
content2 =list(con2)
content3 =list(con3)
# 把列表转换成字符串
c1 =' '.join(content1)
c2 =' '.join(content2)
c3 =' '.join(content3)
return c1, c2, c3
def hanzivec():
""""
中⽂特征值化
:
return:None
"""
c1, c2, c3 = cutword()
print(c1, c2, c3)
cv = CountVectorizer()
data = cv.fit_transform([c1, c2, c3])
_feature_names())# 统计所有⽂章所有的词,重复的只看做⼀次
array())
return None
if __name__ =="__main__":
hanzivec()
运⾏结果如下图所⽰:
(3)TF-IDF
TF-IDF的主要思想:如果某个词或短语在⼀篇⽂章中出现的概率⾼,并且在其他⽂章中很少出现,则认为此词或者短语具有很好地类别区分能⼒,适合⽤来分类。
TF-IDF的作⽤:⽤以评估⼀个字词对于⼀个⽂件集或⼀个语料库中的其中⼀份⽂件的重要程度。
TF:term frequency 词的频率
IDF:inverse document frequency 逆⽂档频率
TF-IDF重要性:log(总⽂档数量/该词出现的⽂档数) 。输⼊的数值越⼩,log值的结果越⼩。
类:sklearn.TfidfVectorizer
TfidfVectorizer语法:
TfidfVectorizer(stop_words = None,…)返回词的权重矩阵
TfidfVectorizer.fit_transform(x):x是⽂本或者包含⽂本字符串的迭代对象,返回sparse矩阵。
mysql删除重复的数据保留一条
TfidfVectorizer.inverse_transform(x):x是array数组或者sparse矩阵,返回值为转换之前数据格式。
<_feature_names():返回单词列表。
为什么需要TfidfVectorizer:分类机器学习算法的重要依据。
con2 = jieba.cut("⽣活不是⼀场赛跑,⽣活是⼀场旅⾏,要懂得好好欣赏每⼀段的风景。")    con3 = jieba.cut("按照⾃⼰的意志去做,不要听那些闲⾔碎语,你就⼀定会成功。")
# 转换成列表
content1 =list(con1)
content2 =list(con2)
content3 =list(con3)
# 把列表转换成字符串
c1 =' '.join(content1)
c2 =' '.join(content2)
c3 =' '.join(content3)
return c1, c2, c3
def tfidfvec():
""""
中⽂特征值化
:return:None
"""
c1, c2, c3 = cutword()
print(c1, c2, c3)
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
_feature_names())# 统计所有⽂章所有的词,重复的只看做⼀次
array())
return None
if __name__ =="__main__":
tfidfvec()
运⾏结果如下图所⽰:
四.特征预处理
1.特征处理

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。