目录
第一部分——概述
什么是机器学习
为什么学习机器学习
1、解放生产力
2、解决专业问题
3、提供社会便利
机器学习应用场景
1、自然语言处理
2、无人驾驶
3、机器视觉系统
4、推荐系统…等
第二部分——特征工程
数据的特征工程
数据的来源
数据的类型
可用的数据集
常见的数据集数据是由 特征值+目标值 组成的
特征工程是什么
特征工程的意义
直接影响模型预测的结果
Scikit-learn库介绍
数据的特征抽取
特征抽取实例
#特征抽取
#
# 导入包
from sklearn.feature_extraction.text import CountVectorizer
#
# # 实例化CountVectorizer
#
vector = CountVectorizer()
#
# # 调用fit_transform输入并转换数据
#
res = vector.fit_transform(["life is short,i like python","life is too long,i dislike python"])
#
# # 打印结果
print(vector.get_feature_names())
#
print(res.toarray())
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
[[0 1 1 1 0 1 1 0]
[1 1 1 0 1 1 0 1]]
注:特征值化是为了计算机可以更好地理解数据
字典特征抽取
代码实例
from sklearn.feature_extraction import DictVectorizer
def dictvec():
'''
字典数据抽取
return:None
'''
#实例化
dict=DictVectorizer()
#调用fit_transform
data = dict.fit_transform(
[{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}])
print(dict.get_feature_names())
print(dict.inverse_transform(data))
print(data)
return None
if __name__=="__main__":
dictvec()
['city=上海', 'city=北京', 'city=深圳', 'temperature']
[{'city=北京': 1.0, 'temperature': 100.0}, {'city=上海': 1.0, 'temperature': 60.0}, {'city=深圳': 1.0, 'temperature': 30.0}]
(0, 1) 1.0
(0, 3) 100.0
(1, 0) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0
字典特征抽取是把字典中一些表示类别的数据分别转换成特征
one-hot编码
文本特征抽取
CountVectorizer 方法
from sklearn.feature_extraction.text import CountVectorizer
def countvec():
'''
对文本进行特征值化
return:None
'''
cv=CountVectorizer()
data=cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])
print(cv.get_feature_names())
print(data.toarray()) #将sparse矩阵转化成矩阵数组
return None
if __name__=="__main__":
countvec()
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
[[0 1 1 1 0 1 1 0]
[1 1 1 0 1 1 0 1]]
文本特征抽取的步骤:
1、统计所有文章当中的所有词,重复的词只统计一次,单独的字母不统计,作为词的列表
2、对每篇文章中,在词的列表中统计每个词出现的次数
中文文本特征抽取
import jieba
from sklearn.feature_extraction.text import CountVectorizer
def cutword():
con1 = 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])
print(cv.get_feature_names())
print(data.toarray())
return None
if __name__=="__main__":
hanzivec()
今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。 我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。 如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。
['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[0 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 0]
[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 1]
[1 1 0 0 4 3 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 0]]
Tf-idf 方法
tf:term frequency 词的频率,出现的次数
idf:inverse document frequency逆⽂文档频率 , log(总⽂文档数量量/该词出现的⽂文档数量量)
代码示例
from sklearn.feature_extraction.text import TfidfVectorizer
def tfidfvec():
"""
中文特征值化
:return: None
"""
c1, c2, c3 = cutword()
print(c1, c2, c3)
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())
return None
if __name__=="__main__":
tfidfvec()
特征的预处理
特征预处理是什么
不同类型数据的预处理方法
归一化
from sklearn.preprocessing import MinMaxScaler
def mm():
"""
归一化处理
:return: NOne
"""
mm = MinMaxScaler(feature_range=(2, 3))
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
if __name__=="__main__":
mm()
[[3. 2. 2. 2. ]
[2. 3. 3. 2.83333333]
[2.5 2.5 2.6 3. ]]
归一化总结
标准化
from sklearn.preprocessing import StandardScaler
def stand():
"""
标准化处理
:return: NOne
"""
std=StandardScaler()
data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])
print(data)
return None
if __name__=="__main__":
stand()
[[-1.06904497 -1.35873244 0.98058068]
[-0.26726124 0.33968311 0.39223227]
[ 1.33630621 1.01904933 -1.37281295]]
缺失值
处理方法
axis=0表示对列进行操作
import numpy as np
from sklearn.preprocessing import Imputer
def im():
"""
缺失值处理
:return:None
"""
# NaN, nan
im = Imputer(missing_values='NaN', strategy='mean', axis=0)
data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return None
if __name__=="__main__":
im()
[[1. 2.]
[4. 3.]
[7. 6.]]
特征选择
特征选择是什么
主要方法
VarianceThreshold
from sklearn.feature_selection import VarianceThreshold
def var():
"""
特征选择-删除低方差的特征
:return: None
"""
var = VarianceThreshold(threshold=1.0)
data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
return None
if __name__=="__main__":
var()
[[0]
[4]
[1]]
特征降维PCA方法(减少特征的数量)
n_components:为小数时,是指保留的特征数量与全部特征数量的百分比;为 整数时,是指减少到的特征数量
from sklearn.decomposition import PCA
def pca():
"""
主成分分析进行特征降维
:return: None
"""
pca = PCA(n_components=0.9)
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None
if __name__ == "__main__":
pca()
[[ 1.28620952e-15 3.82970843e+00]
[ 5.74456265e+00 -1.91485422e+00]
[-5.74456265e+00 -1.91485422e+00]]