1. 分类与预测
分类的概念
-
预测分类标号(或离散值)
-
根据训练数据集和类标号属性,构建模型来分类现有数据, 并用来分类新数据
预测 -
预测分类标号(或离散值)建立连续函数值模型,预测新事物
分类举例
分类问题的实施过程
分类问题的基本要素
分类问题的应用场景
常用的分类算法
2. 决策树分类算法
认识决策树
如何根据观看电影记录预测用户喜欢哪一种类型的电影?
决策树的形式
决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。
如何构建决策树
决策树分类算法——熵的概念
决策树分类算法——熵的计算
决策树分类算法——熵计算例子
决策树分类算法——观影信息的熵
决策树分类算法——属性选择
决策树分类算法——算法实战
数据集
id,type,country,gross,watch
1,anime,Janan,low,yes
2,science,America,low,yes
,anime,America,low,yes
4,action,America,high,yes
5,action,China,high,yes
6,anime,China,low,yes
7,science,France,low,no
8,action,China,low,no
工具库
graphviz 0.13.2
numpy 1.18.0
pydotplus 2.0.2
sklearn
代码实现
import csv
import os
os.environ["PATH"] += os.pathsep + 'D:\\Program Files\\Graphviz2.38\\bin'
from sklearn.feature_extraction import DictVectorizer
from sklearn import preprocessing
from sklearn import tree
film_data = open('film.csv', 'rt')
reader = csv.reader(film_data)
# 表头信息
headers = next(reader)
print(headers)
feature_list = [] # 特征值
result_list = [] # 结果
for row in reader:
result_list.append(row[-1])
# 去掉首位两列,特征集中只保留'type', 'country', 'gross'
feature_list.append(dict(zip(headers[1:-1], row[1:-1])))
print(result_list)
print(feature_list)
vec = DictVectorizer() # 将dict类型的list数据,转换成numpy array
dummyX = vec.fit_transform(feature_list).toarray()
dummyY = preprocessing.LabelBinarizer().fit_transform(result_list)
# country |,gross|,type
# 0,0,0 , 0 |0,0,|0 , 0,0
# 注意,dummyX是按首字母排序的 'country','gross','type'
print(dummyX)
print(dummyY)
clf = tree.DecisionTreeClassifier(criterion='entropy', random_state=0)
clf = clf.fit(dummyX, dummyY)
print("clf: " + str(clf))
import pydotplus
dot_data = tree.export_graphviz(clf,
feature_names=vec.get_feature_names(),
filled=True, rounded=True,
special_characters=True,
out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("film.pdf")
# # 开始预测
A = ([[0, 0, 0, 1, 0, 1, 0, 1, 0]]) # 日本(4)-低票房(2)-动画片(3)
B = ([[0, 0, 1, 0, 0, 1, 0, 1, 0]]) # 法国(4)-低票房(2)-动画片(3)
C = ([[1, 0, 0, 0, 1, 0, 1, 0, 0]]) # 美国(4)-高票房(2)-动作片(3)
#
predict_result = clf.predict(C)
print("预测结果: " + str(predict_result))
([[1, 0, 0, 0, 1, 0, 1, 0, 0]]) # 美国(4)-高票房(2)-动作片(3) #
predict_result = clf.predict(C)
print("预测结果: " + str(predict_result))