直接上代码
import pandas as pd
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.feature_extraction import DictVectorizer
from sklearn.ensemble import RandomForestClassifier
filename = 'titanic.csv'
data = pd.read_csv(filename)
x = data[['Pclass', 'Age', 'Sex']]
y = data['Survived']
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)
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.25)
dictver = DictVectorizer(sparse=False)
x_train = dictver.fit_transform(x_train.to_dict(orient="records"))
x_test = dictver.fit_transform(x_test.to_dict(orient="records"))
print("----------------------------------------------------------------------------------------------------------------------------")
print("随机森林")
rf=RandomForestClassifier()
params={"n_estimators":[20, 30, 50, 100, 200, 500,800,1000],"max_depth":[5, 8, 15, 25, 30,35,40,50]}
gscv=GridSearchCV(rf,params,cv=2)
gscv.fit(x_train,y_train)
print("随机森林 准确率:",gscv.score(x_test,y_test))
print("随机森林 查看模型的选择参数:",gscv.best_params_)
print("----------------------------------------------------------------------------------------------------------------------------")
print("决策树")
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
parameters={'max_depth':[1,3,5,10,20,30]}
tree=GridSearchCV(DecisionTreeClassifier(),param_grid=parameters,scoring='accuracy')
tree.fit(x_train,y_train)
print("-------------显示网格搜索到的最佳决策树深度和得分-")
print(tree.best_params_)
print(tree.best_score_)
print("-------------决策树预测的精度,查全率、查准率、F1 分数等--")
y_pred=tree.predict(x_test)
print("决策树 准确率:" ,accuracy_score(y_test,y_pred))
print(classification_report(y_test,y_pred))
print("----------------------------------------------------------------------------------------------------------------------------")
print("----------------------------------------------------------------------------------------------------------------------------")
print("梯度提升树")
from sklearn.ensemble import GradientBoostingClassifier
param_grid={'n_estimators':[30,50,80,120,200],'learning_rate':[0.05,0.1,0.5,1],'max_depth':[1,2,3,4,5]}
grid_search=GridSearchCV(GradientBoostingClassifier(),param_grid,cv=5)
grid_search.fit(x_train,y_train)
print("梯度提升树 准确率:")
grid_search.best_params_,grid_search.best_score_
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/50746535a6f0aa2dd6159c41a9d18364.png)