6.决策树算法

介绍

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

决策树划分依据一-信息增益

在这里插入图片描述
在这里插入图片描述

案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

决策树划分依据二-信息增益率

在这里插入图片描述

案例一

在这里插入图片描述

案例二

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

C4.5流程总结

在这里插入图片描述

为什么C4.5更好

在这里插入图片描述

决策树划分依据三-基尼值和基尼指数

在这里插入图片描述

案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

CART算法流程

在这里插入图片描述

CART 剪枝

为什么要剪枝

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常用的剪枝方法

在这里插入图片描述

预剪枝

在这里插入图片描述
在这里插入图片描述

后剪枝

在这里插入图片描述
在这里插入图片描述

两种剪枝方法对比

在这里插入图片描述

特征工程-特征提取

在这里插入图片描述

API

在这里插入图片描述

字典特征提取

在这里插入图片描述

例子

在这里插入图片描述

案例
from sklearn.feature_extraction import DictVectorizer

sparse=False

# 获取数据
data = [
    {"city":"北京","temperature":100},
    {"city":"上海","temperature":60},
    {"city":"深圳","temperature":30},  
]

#字典特征提取
# 实例化
transfer = DictVectorizer(sparse=False)
# 转换
new_data = transfer.fit_transform(data)
# 获取具体属性名
names = transfer.get_feature_names()
print(new_data,names)

在这里插入图片描述
sparse=True ——更节省空间

#字典特征提取
# 实例化
transfer2 = DictVectorizer(sparse=True)
# 转换
new_data2 = transfer2.fit_transform(data)
# 获取具体属性名
names2 = transfer2.get_feature_names()
print(new_data2,names2)

在这里插入图片描述

文本特征提取

在这里插入图片描述

英文案例
from sklearn.feature_extraction.text import CountVectorizer
# 获取数据
data = ["life is short,i like python",
       "life is too long,i dislike python"]
# 文本特征转换
# 没有sparse这个参数
transfer = CountVectorizer(stop_words=["dislike"])
new_data = transfer.fit_transform(data)

# 查看特征名字
print("内容:\n",new_data)
print("修改输出内容格式:\n",new_data.toarray())
print("特征名字:\n",transfer.get_feature_names())

在这里插入图片描述

中文案例
from sklearn.feature_extraction.text import CountVectorizer
# 获取数据
data = ["人生苦短,我喜欢python",
       "生活 太长久,我 不喜欢 python"]
# 文本特征转换
# 没有sparse这个参数
transfer = CountVectorizer()
new_data = transfer.fit_transform(data)

# 查看特征名字
print("内容:\n",new_data)
print("修改输出内容格式:\n",new_data.toarray())
print("特征名字:\n",transfer.get_feature_names())

在这里插入图片描述
英文默认以空格切割单词,不适用于中文

使用jieba分词处理中文
pip3 install jieba
import jieba
text = "人生苦短,我喜欢python,生活太长久,我不喜欢python"
print("原文章:\n",text)
text = jieba.cut(text)
print("使用jieba分割:\n",text)
text = list(text)
print("转换格式:\n",text)
text = " ".join(text)
print("加入空格:\n",text)

在这里插入图片描述

import jieba
from sklearn.feature_extraction.text import CountVectorizer

def cut_word(text):
    return " ".join(list(jieba.cut(text)))
    
data = [
    "一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
    "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
    "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"
]

data2 = []
for temp in data:
    data2.append(cut_word(temp))
print("分割后数据:\n",data2)

# 文本特征转换
# 没有sparse这个参数
transfer = CountVectorizer(stop_words=["一种","今天"])
new_data = transfer.fit_transform(data2)

# 查看特征名字
print("内容:\n",new_data)
print("修改输出内容格式:\n",new_data.toarray())
print("特征名字:\n",transfer.get_feature_names())

在这里插入图片描述
在这里插入图片描述
可使用网络整理好的停用词总汇,方便开发

Tf-idf文本特征提取

在这里插入图片描述

公式

在这里插入图片描述
在这里插入图片描述

from sklearn.feature_extraction.text import TfidfVectorizer
import jieba

def cut_word(text):
    return " ".join(list(jieba.cut(text)))
    
data = [
    "一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
    "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
    "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"
]

data2 = []
for temp in data:
    data2.append(cut_word(temp))
print("分割后数据:\n",data2)

# 文本特征转换
# 没有sparse这个参数
transfer = TfidfVectorizer()
new_data = transfer.fit_transform(data2)

# 查看特征名字
print("内容:\n",new_data)
print("修改输出内容格式:\n",new_data.toarray())
print("特征名字:\n",transfer.get_feature_names())

在这里插入图片描述
在这里插入图片描述

API

在这里插入图片描述

案例:泰坦尼克号乘客生存预测

在这里插入图片描述
注:数据获取网址

导入依赖

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier

获取数据

titan = pd.read_csv("titanic.csv")
titan.head()

在这里插入图片描述

数据基本处理

# 确定特征值,目标值
x = titan[["pclass","age","sex"]]
y = titan["survived"]
print("特征值:\n",x.head())
print("目标值:\n",y.head())

在这里插入图片描述

# 缺失值处理
x["age"].fillna(value=titan["age"].mean(),inplace=True)
print("特征值:\n",x)

在这里插入图片描述

# 数据集划分
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=22,test_size=0.2)
x_train.head()

在这里插入图片描述

特征工程-字典特征抽取

#数据转换为字典
x_train = x_train.to_dict(orient="records")
x_test = x_test.to_dict(orient="records")
x_train

在这里插入图片描述

#字典特征抽取
transfer = DictVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
x_test

在这里插入图片描述

机器学习-决策树

estimator = DecisionTreeClassifier(max_depth=5)
estimator.fit(x_train,y_train)

模型评估

y_pre = estimator.predict(x_test)
y_pre

在这里插入图片描述

ret = estimator.score(x_test,y_test)
print(ret)

在这里插入图片描述

决策树可视化

from sklearn.tree import export_graphviz
# 决策树可视化
export_graphviz(estimator,out_file="tree.dot",feature_names=["age","pclass=1st","pclass=3nd","pcalss=3rd","女性","男性"])

在这里插入图片描述
在这里插入图片描述
在线可视化决策树网址,也可下载Graphviz软件
在这里插入图片描述

回归决策树

在这里插入图片描述

原理

在这里插入图片描述
在这里插入图片描述

算法描述

在这里插入图片描述

算法例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

回归决策树和线性回归对比

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
from sklearn.linear_model import LinearRegression
# 生成数据
x = np.array(list(range(1,11))).reshape(-1,1)
print(x)

在这里插入图片描述

y = ([5.56,5.70,5.91,6.40,6.80,7.05,8.90,8.70,9.00,9.05])
print(y)

在这里插入图片描述

# 模型训练
m1 = DecisionTreeRegressor(max_depth=1)
m2 = DecisionTreeRegressor(max_depth=3)
m3 = LinearRegression()

m1.fit(x,y)
m2.fit(x,y)
m3.fit(x,y)
# 模型预测
x_test = np.arange(0,10,0.01).reshape(-1,1)
y_1 = m1.predict(x_test)
y_2 = m2.predict(x_test)
y_3 = m3.predict(x_test)
# 结果可视化
plt.figure(figsize=(10,6),dpi=100)
plt.scatter(x,y,label="data")

plt.plot(x_test,y_1,label="max_depth=1")
plt.plot(x_test,y_2,label="max_depth=3")
plt.plot(x_test,y_3,label="linear regression")

plt.xlabel("数据")
plt.ylabel("预测值")
plt.legend()

plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值