机器学习算法+代码
机器学习
⼀、概述
1、机器学习研究⽅向
传统预测
图像识别
⾃然语⾔处理
2、数据集构成
数据集 = 特征值+⽬标值
监督学习:
⽬标值为类别 属于分类问题
⽬标值为连续数据 属于回归问题
⽆监督学习
⽆⽬标值
3、机器学习流程
1. 获取数据
2. 数据处理
3. 特征⼯程
4. 机器学习模型-训练模型
5. 模型评估
6. 应⽤
4、书籍、框架
机器学习 深度学习
数集 西⽠书–周志华 花书
框架 sklearn theano、caffe2、chainer
数据集 sklearn、kaggle、UCI
⼆、特征⼯程
1、数据集
pip3 install Scikit-learn==0.19.1
from sklearn.datasets import load_**#
⼩数据集
from sklearn.datasets import fetch_**#
⼤数据集
1、⼩规模数据集
datasets.load_*()
#
鸢尾花数据集
sklearn.datasets.load_iris()
#
波⼠顿房价数据集
sklearn.datasets.load_boston()
2、⼤规模数据集
datasets.fetch_*(data_home=None,subset=“train”)
data_home,表⽰数据集下载的⽬录,默认是 ~/scikit_learn_data/
subset:train表⽰只要测试集;all表⽰全部数据都要;test表⽰只要测试集
3、数据集的返回值
返回值类型:datasets.base.Bunch(继承⾃字典)
返回值属性:
data:特征值
target:标签
descr:数据描述
feature_names:特征名
target_names:标签名
调⽤返回值⽅式:
bunch.key = value
dict[‘key’] = value
from sklearn.datasets import load_iris
def datasets_demo():
sklearn数据集的使⽤
:return: :return:
#
获取数据集
iris = load_iris()
print(( 鸢尾花数据集:鸢尾花数据集: ,iris)
print(( 查看数据集描述:查看数据集描述: ,iris['DESCR'])
print(( 查看数据集特征值的名字:查看数据集特征值的名字: ,iris.feature_names)
print(( 查看数据集标签的名字:查看数据集标签的名字: ,iris.target_names)
print(( 查看数据集特征值:查看数据集特征值: ,iris.data.shape , iris.data)# shape
:
(150, 4)
return None
if __name__ == :
#
代码
1
:
sklearn
数据集使⽤
datasets_demo()
4、数据集划分
from sklearn.model_selection import train_test_split
机器学习⼀般的数据集会划分为两个部分:
训练数据:⽤于训练,构建模型
测试数据:在模型检验时使⽤,⽤于评估模型是否有效
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_iris
from sklearn.model_selection import train_test_split
def datasets_demo():
sklearn数据集的使⽤
:return: :return:
#
获取数据集
iris = load_iris()()
鸢尾花数据集:鸢尾花数据集:鸢尾花数据集:
查看数据集描述:查看数据集描述:查看数据集描述:
查看数据
.
集特征值的名字:集特征值的名字:集特征值的名字:
查看数据集数据:查看数据集数据: :
(150, 4)
#
数据集的划分
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22 )
print(( 训练集的特征值:训练集的特征值: ,x_train,x_train.shape)
return None
if __name__ == :
#
代码
1
:
sklearn
数据集使⽤
datasets_demo()
2、特征⼯程
什么是特征⼯程?
专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作⽤的过程。(使⽤pandas、numpy对特征进⾏些处理)
特征⼯程内容分为三类:特征抽取、特征预处理、特征降维
1、特征抽取/特征提取
1)字典特征提取(特征离散化)
from sklearn.feature_extraction import DictVectorizer
属性
DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵(稀疏矩阵)
DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
DictVectorizer.get_feature_names() 返回类别名称
使⽤场景
数据类型是字典
数据集中存在类别特征⽐较多(性别、等级),先将数据集的特征转化为字典类型,然后使⽤DictVerctorizer进⾏转换
代码
from sklearn.feature_extraction import DictVectorizer
def dict_demo():
字典特征抽取
:return: :return:
data = [{'city': '北京', 'temperature': 100}
, {'city': '上海', 'temperature': 60}
, {'city': '深圳', 'temperature': 30}]
# 1
、实例化转换器
transfer = DictVectorizer(sparse=False)
# 2
、调⽤
fit_transform
data_new = transfer.fit_transform(data,y=None)
print(( 打印返回结果:打印返回结果: ,data_new)
if __name__ == :
dict_demo()
sparse = False
sparse=Ture,只表⽰不是0的东西,可节约内存
注意:数据提取类似之前pandas中的one-hot编码
2)、⽂本特征提取
sklearn.feature_extraction.text import CountVectorizer
1、实例化
trans = CountVectorizer(stop_words)
stop_words表⽰停⽤词,即使样本中出现但是依旧不计数的词,通常有⼀个停⽤词表。
2、⽅法
CountVectorizer.fit_transform(X)
X:⽂本或者包含⽂本字符串的可迭代对象 返回值:返回sparse矩阵
统计每个样本中特征值出现的次数
CountVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵 返回值:转换之前数据格
CountVectorizer.get_feature_names() 返回值:单词列表
3、流程
实例化类CountVectorize
调⽤fit_transform⽅法输⼊数据并转换,注意返回格式,利⽤toarray()进⾏sparse矩阵转换array数组
sklearn.feature_extraction.text import CountVectorizer
def text_count_demo():
对⽂本进⾏特征抽取,countvetorizer
:return: :return:
data = [[
, ]
# 1
实例化转换器类
transfer = CountVectorizer(stop_words=['is','like'])#stop_words:
停⽤词
# 2
调⽤转换器中的⽅法
data_new = transfer.fit_transform(data)
print(( ,data_new.toarray())
print(( 数组数组 ,transfer.inverse_transform(data_new))
print(( 特征名字特征名字 ,transfer.get_feature_names())
if __name__ == :
text_count_demo()
注意:此⽅法不⽀持中⽂,因为中⽂中没有空格,除⾮先分词
4、jieba中⽂分词
pip3 install jieba
from sklearn.feature_extraction.text import CountVectorizer
import jieba
def china_text_count_demo():
对中⽂⽂本进⾏特征抽取,countvetorizer
:return: :return:
data = [[ 我爱北京天安门我爱北京天安门
, 天安门上太阳升天安门上太阳升 ]
# 1
实例化转换器类
transfer = CountVectorizer()
# 2
调⽤转换器中的⽅法
data_new = transfer.fit_transform(data)
print(( ,data_new.toarray())
print(( 数组数组 ,transfer.inverse_transform(data_new))
print(( 特征名字特征名字 ,transfer.get_feature_names())
def cut_word(text):
进⾏中⽂分词“我爱北京天安门 --> 我 爱 北京 天安门”
:return: :return:
a = .join(list((jieba.cut(text))))
print(a)
return text