介绍
熵
决策树划分依据一-信息增益
案例
决策树划分依据二-信息增益率
案例一
案例二
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()