@day1
人工智能阶段
机器学习 三天
深度学习 三天
量化交易 四天
传统的机器学习算法
机器学习概述、特征工程 1天
分类算法 1天``
回归算法、聚类 1天
机器学习概述
1.1 人工智能概述
达特茅斯会议-人工智能的起点
机器学习是人工智能的一个实现途径
深度学习是机器学习的一个方法发展而来
1.1.2 机器学习、深度学习能做些什么
传统预测
图像识别
自然语言处理
1.2 什么是机器学习
数据
模型
预测
从历史数据当中获得规律?这些历史数据是怎么的格式?
1.2.3 数据集构成
特征值 + 目标值
1.3 机器学习算法分类
监督学习
目标值:类别 - 分类问题
k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归
目标值:连续型的数据 - 回归问题
线性回归、岭回归
目标值:无 - 无监督学习
聚类 k-means
1、预测明天的气温是多少度? 回归
2、预测明天是阴、晴还是雨? 分类
3、人脸年龄预测? 回归/分类
4、人脸识别? 分类
1.4 机器学习开发流程
1)获取数据
2)数据处理
3)特征工程
4)机器学习算法训练 - 模型
5)模型评估
6)应用
1.5 学习框架和资料介绍
1)算法是核心,数据与计算是基础
2)找准定位
3)怎么做?
1、入门
2、实战类书籍
3、机器学习 -”西瓜书”- 周志华
统计学习方法 - 李航
深度学习 - “花书”
4)1.5.1 机器学习库与框架
特征工程
2.1 数据集
2.1.1 可用数据集
公司内部 百度
数据接口 花钱
数据集
学习阶段可以用的数据集:
1)sklearn
2)kaggle
3)UCI
2.1.2 sklearn数据集
1 Scikit-learn工具介绍
sklearn.datasets
load_* 获取小规模数据集
fetch_* 获取大规模数据集
2 sklearn小数据集
sklearn.datasets.load_iris()
3 sklearn大数据集
sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
4 数据集的返回值
datasets.base.Bunch(继承自字典)
data:特征数据数组
target:标签数组
DESCR:数据描述
feature_names:特征名,新闻数据,手写数字,回归数据集没有
target_names:标签名
dict["key"] = values
bunch.key = values
思考:拿到的数据是否全部都用来训练一个模型?
2.1.3 数据集的划分
训练数据:用于训练,构建模型
测试数据:在模型检验时使用,用于评估模型是否有效
测试集 20%~30%
sklearn.model_selection.train_test_split(arrays, options)
训练集特征值,测试集特征值,训练集目标值,测试集目标值
x_train, x_test, y_train, y_test random_state:随机种子
2.2 特征工程介绍
算法 特征工程
2.2.1 为什么需要特征工程(Feature Engineering)
2.2.2 什么是特征工程
sklearn 特征工程
pandas 数据清洗、数据处理
特征抽取/特征提取 (将任意数据转换成可用于机器学习的数学特征)
机器学习算法 - 统计方法 - 数学公式
文本类型 -》 数值
类型 -》 数值
2.3.1 特征提取
sklearn.feature_extraction
2.3.2 字典特征提取 - 类别 -> one-hot编码
sklearn.feature_extraction.DictVectorizer(sparse=True,…)
vector 数学:向量 物理:矢量
矩阵 matrix 二维数组
向量 vector 一维数组
父类:转换器类
返回sparse矩阵(sparse=True)默认
sparse稀疏
将非零值 按位置表示出来
节省内存 - 提高加载效率
应用场景:
1)pclass, sex 数据集当中类别特征比较多
1、将数据集的特征-》字典类型
2、DictVectorizer转换
2)本身拿到的数据就是字典类型
2.3.3 文本特征提取
单词 作为 特征
句子、短语、单词、字母
特征:特征词
方法1:CountVectorizer
统计每个样本特征词出现的个数
stop_words停用的词
停用词表
关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少
str.join(sqe) 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
方法2:TfidfVectorizer
TF-IDF - 重要程度
两个词 “经济”,“非常”
1000篇文章-语料库
100篇文章 - "非常"
10篇文章 - “经济”
两篇文章
文章A(100词) : 10次“经济” TF-IDF:0.2
tf:10/100 = 0.1
idf:lg 1000/10 = 2
文章B(100词) : 10次“非常” TF-IDF:0.1
tf:10/100 = 0.1
idf: log 10 1000/100 = 1
对数?
2 ^ 3 = 8
log 2 8 = 3
log 10 10 = 1
TF - 词频(term frequency,tf)
IDF - 逆向文档频率
特征预处理
2.4.1 什么是特征预处理 sklearn.
为什么我们要进行归一化/标准化?
通过一些转换函数将特征数据装换成更加适合算法模型的特征数据过程
无量纲化
2.4.2 归一化(通过原始数据 把数据映射到-之间)MinMaxScaler
异常值:最大值、最小值
X'=(x-min)/(max-min) X“=X'*(mx-mi)+mi (mx为一列最大值,mi为最小值,一般为1-0)
2.4.3 标准化(用原始把数据变换到均值为0,标准差为1的范围内)StandardScaler
X'=(x - mean) / std(标准差)
标准差:集中程度
应用场景:
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
特征降维
2.5.1 降维 - 降低维度
ndarray
维数:嵌套的层数
0维 标量
1维 向量
2维 矩阵
3维
n维
二维数组
此处的降维:
降低特征的个数
效果:
特征与特征之间不相关
2.5.2 降维(降低随机变量的个数,得到一组不相关主变量)
特征选择(从原有特征中找出主要特征)
Filter过滤式
方差选择法:低方差特征过滤
相关系数 - 特征与特征之间的相关程度
取值范围:–1≤ r ≤+1
皮尔逊相关系数
0.9942
特征与特征之间相关性很高:
1)选取其中一个
2) 加权求和
3)主成分分析
主成分分析
2.6.1 什么是主成分分析(PCA:找到一个合适的直线,通过一个矩阵运算得出主成分分析的结果)
sklearn.decomposition.PCA(n_components=None)
n_components
小数 表示保留百分之多少的信息
整数 减少到多少特征
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
from sklearn.decomposition import PCA
# 鸢尾花数据集
def datasets_demo():
iris = load_iris()
print("鸢尾花数据集:\n", iris)
print("鸢尾花的数据集描述:\n", iris["DESCR"])
print("查看特征值的名字:\n", iris.feature_names)
print("查看特征值:\n", iris.data, iris.data.shape)
# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
print("训练集的特征值:\n", x_train, x_train.shape)
print(
"----------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
return None
# 字典特征抽取
def dict_demo():
# 字典特征抽取
data = [{'city': '北京', '温度': 10}, {'city': '上海', '温度': 20}, {'city': '成都', '温度': 30}]
# 实例化一个转化器
transfer = DictVectorizer(sparse=False)
# 调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
print("特征名字:\n", transfer.get_feature_names())
print(
"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
return None
# 英文本特征抽取
def count_demo():
# 文本特征抽取 :CountVectorizer
data = ["good good study", "day day up"]
# 实例化一个转换对象
transfer = CountVectorizer()
data_new = transfer.fit_transform(data).toarray()
print("data_new:\n", data_new)
name_new = transfer.get_feature_names()
print("特征名字:\n", name_new)
print(
"-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
return None
# 中文文本特征抽取
def count_chinese_demo():
# 中文文本特征抽取
data = ["热爱 世间 万 物", "无 最 爱,无 例 外"]
# 实例化一个转换对象
transfer = CountVectorizer()
data_new = transfer.fit_transform(data)
print("特征值名称:\n", transfer.get_feature_names())
print("data_new:\n", data_new.toarray())
print(
"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
return None
# jieba分词
def cut_word(text):
"""
进行中文分词:热爱世间万物--热爱 世间 万 物
利用 jieba 进行断句
"""
print(
"-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
return " ".join(list(jieba.cut(text)))
# 中文文本分词
def count_chinese_demo2():
# 将中文文本进行分词
data = ["想让自己成为美好的人拥有热情习惯麻烦热爱生活感谢黑夜的降临才会有新的明天大概是为自己从未过好今天找的最拙劣的借口", "但我也希望告别以前的自己那个把未来描述成不堪重负黯淡无光的自己",
"新的一年愿我爱的一切岁岁平安愿岁月无可回头亦不忧愁"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
print(data_new)
print(
"---------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
# 实例化一个对象
transfer = CountVectorizer(stop_words=["自己"])
data_last = transfer.fit_transform(data_new).toarray()
print("data_last:\n", data_last)
print("特征名字:\n", transfer.get_feature_names())
print(
"---------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
return None
# 文本特征抽取
def tfidf_demo():
# 将中文文本进行分词
data = ["想让自己成为美好的人拥有热情习惯麻烦热爱生活感谢黑夜的降临才会有新的明天大概是为自己从未过好今天找的最拙劣的借口", "但我也希望告别以前的自己那个把未来描述成不堪重负黯淡无光的自己",
"新的一年愿我爱的一切岁岁平安愿岁月无可回头亦不忧愁"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
print(data_new)
print(
"---------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
# 实例化一个对象
transfer = TfidfVectorizer(stop_words=["自己"])
data_last = transfer.fit_transform(data_new).toarray()
print("data_last:\n", data_last)
print("特征名字:\n", transfer.get_feature_names())
print(
"---------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
return None
# 归一化
def minmax_demo():
"""
归一化
"""
# 获取数据
# 读取文本文件
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
# 实例化一个转换器 范围自己规范,默认0-1
tranfer = MinMaxScaler(feature_range=[0, 1])
# 调用fit_transform
data_new = tranfer.fit_transform(data)
print("data:\n", data_new)
return None
# 标准化
def stand_demo():
"""
归一化
"""
# 获取数据
# 读取文本文件
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
# 实例化一个转换器 范围自己规范,默认0-1
tranfer = StandardScaler()
# 调用fit_transform
data_new = tranfer.fit_transform(data)
print("data:\n", data_new)
return None
# 低方差过滤
def vari_demo():
"""
降维
"""
# 获取数据
# 读取文本文件
data = pd.read_csv("factor_returns.csv")
data = data.iloc[:, 1:-2]
# 实例化一个转换器 范围自己规范,默认0-1
tranfer = VarianceThreshold()
# 调用fit_transform
data_new = tranfer.fit_transform(data)
print("data:\n", data_new, data_new.shape)
# 计算俩个变量之间的相关系数
r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])
print("相关系数:\n", r1)
r2 = pearsonr(data['revenue'], data['total_expense'])
print("相关系数",r2)
return None
# 主成分分析-降维
def pca_demo():
data=[[2,1,6,5],[5,6,3,8],[5,6,8,0]]
transfer=PCA(n_components=2)
data_new=transfer.fit_transform(data)
print('data_new:\n',data_new)
return None
if __name__ == '__main__':
# 中文文本特征抽取
# count_chinese_demo()
# 中文文本分词
# count_chinese_demo2()
# 文本特征抽取
# tfidf_demo()
# 归一化
# minmax_demo()
# 标准化
# stand_demo()
# 低方差过滤
# vari_demo()
# 主成分分析-降维
pca_demo()