决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。
可以看到,决策树的决策过程非常直观,容易被人理解。目前决策树已经成功运用于医学、制造产业、天文学、分支生物学以及商业等诸多领域。
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier
def decision():
# 加载文件,得到数据
# 决策树对泰坦尼克号进行预测生死
tian = pd.read_csv('Titanic.csv')
# 处理数据,找出特征值和目标值
x = tian[['Pclass','Age','Sex']]
y = tian['Survived']
# print(x)
# 缺失值处理
x['Age'].fillna(x['Age'].mean(),inplace=True)
# 分割数据集到训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
dict = DictVectorizer(sparse=False)
x_train = dict.fit_transform(x_train.to_dict(orient="records"))
print(x_train)
x_test = dict.transform(x_test.to_dict(orient="records"))
# 用决策树进行预测
dec = DecisionTreeClassifier()
dec.fit(x_train,y_train)
# 预测准确率
print(dec.predict(x_test))
print("预测的准确率:",dec.score(x_test,y_test))
rf = RandomForestClassifier(n_jobs=-1)
param = {"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,8,15,25,30]}
# 网络搜索与交叉验证
gc = GridSearchCV(rf,param_grid=param,cv=2)
gc.fit(x_train,y_train)
print("准确率:",gc.score(x_test,y_test))
return None
if __name__ == '__main__':
decision()