# 4.模型训练与拟合 model = DecisionTreeClassifier(max_depth=15, min_samples_leaf=5, min_samples_split=7) model.fit(x_train, y_train) y_pred = model.predict(x_test) qd = request.POST.get('qd') tz = request.POST.get('tz') ay = request.POST.get('ay') dl = request.POST.get('dl') hj = request.POST.get('hj') nj = request.POST.get('nj') sryc = [[qd,tz,ay,dl,hj,nj]] y_pred2 = model.predict(sryc) print(y_pred2) # 查看acc分数 from sklearn.metrics import accuracy_score score = accuracy_score(y_pred, y_test) print('Accuracy分数为:' + str(score)) features = x.columns importances = model.feature_importances_ df = pd.DataFrame() df['特征名称'] = features df['特征重要性'] = importances f = df.sort_values('特征重要性', ascending=False) print(f)
时间: 2024-01-09 12:05:58 浏览: 122
这段代码中,首先使用 Scikit-Learn 中的决策树分类器 DecisionTreeClassifier 进行模型的训练和拟合。其中,max_depth、min_samples_leaf 和 min_samples_split 是一些超参数,用于控制决策树的深度和叶子节点的最小样本数量等,以避免过拟合问题。
接下来,从请求对象 request 中获取一些数据,并使用训练好的模型对这些数据进行预测。预测结果保存在 y_pred2 变量中,并打印出来。
然后,使用 Scikit-Learn 中的 accuracy_score 函数计算模型在测试集上的准确率,将其保存在 score 变量中,并打印出来。
最后,使用 Pandas 库创建一个 DataFrame 对象,其中包含每个特征的名称和其在模型中的重要性。这个 DataFrame 按特征重要性降序排列,并打印出来。
相关问题
# 拆分训练集 验证集 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3) # 网格调优(预剪枝) 通过自动调优找到最优参数值 from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import GridSearchCV parameters2={'max_depth':[15,17,20],'min_samples_leaf':[3,4,5],'min_samples_split':[7,9,10]} model2=DecisionTreeClassifier(random_state=42) grid_search=GridSearchCV(model2,parameters2,cv=5) grid_search.fit(x_train,y_train) i=grid_search.best_params_ print(i) # 4.模型训练与拟合 model = DecisionTreeClassifier(max_depth=15,min_samples_leaf=3,min_samples_split=10) model.fit(x_train, y_train) y_pred = model.predict(x_test) # 查看acc分数 from sklearn.metrics import accuracy_score score = accuracy_score(y_pred,y_test) print('Accuracy分数为:'+str(score)) from sklearn.metrics import precision_recall_fscore_support # 计算precision, recall, F1-score, support pre, rec, f1, sup = precision_recall_fscore_support(y_pred, y_test) print("precision:", pre, "\nrecall:", rec, "\nf1-score:", f1, "\nsupport:", sup) features=x.columns importances=model.feature_importances_ df=pd.DataFrame() df['特征名称']=features df['特征重要性']=importances f=df.sort_values('特征重要性',ascending=False) print(f) import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False import numpy as np sj = np.linspace(0.5, len(df['特征重要性']), len(df['特征重要性'])) plt.figure(figsize=(11, 8)) plt.bar(x=sj, height=df['特征重要性'], width=0.5, color='r') plt.xticks(rotation=340) xb = df['特征名称'] plt.xticks(sj, xb) plt.title('特征重要性柱图') plt.show() # 混淆矩阵 from sklearn import metrics metrics.plot_confusion_matrix(model, x_test, y_test) plt.show()
这段代码是关于决策树分类器的模型训练和评估的,其中包括数据集的拆分、网格搜索调优、模型训练与拟合、模型评估和特征重要性分析等步骤。具体来说:
1. 根据数据集 x 和标签 y,使用 train_test_split 函数将数据集拆分为训练集和测试集,其中测试集占比为 0.3。
2. 通过网格搜索调优,使用 GridSearchCV 函数找到最优参数值,包括最大深度、最小叶子节点数和最小分裂节点数,使用决策树分类器 DecisionTreeClassifier,并设置随机种子为 42。
3. 使用最优参数值,创建决策树分类器模型,并使用训练集进行训练和拟合。之后使用测试集进行预测,计算 Accuracy 分数和 precision、recall、f1-score、support 等指标。
4. 分析特征重要性,使用 feature_importances_ 属性获取特征重要性,将特征名称和其重要性组成一个 Pandas DataFrame,并按照特征重要性降序排序。之后使用 Matplotlib 绘制特征重要性柱图。
5. 最后,使用混淆矩阵函数 metrics.plot_confusion_matrix 绘制混淆矩阵,评估模型的分类效果。
from sklearn.ensemble import RandomForestClassifier rf_model = RandomForestClassifier(random_state=42, min_samples_leaf=25) prams ={ 'n_estimators':[10 ,20,40,50, 70], 'max_depth' : [3 ,5, 7,8, 11, 12],'min_samples_split' : [2, 3, 5, 9] , 'criterion' : ['gini', 'entropy'], 'max_features':['sqrt','log2'] } gd_rf= GridSearchCV(rf_model , param_grid=prams, n_jobs=-1 ,cv=10) gd_rf.fit(X_train , y_train) print(gd_rf.best_estimator_)解释各行代码
这段代码使用了随机森林分类器模型,通过网格搜索来寻找最佳的超参数组合。下面是各行代码的解释:
1. `from sklearn.ensemble import RandomForestClassifier`:从sklearn库中导入随机森林分类器模型。
2. `rf_model = RandomForestClassifier(random_state=42, min_samples_leaf=25)`:创建一个随机森林分类器模型,其中`random_state`表示随机种子数,`min_samples_leaf`表示叶节点的最小样本数。
3. `prams ={ 'n_estimators':[10 ,20,40,50, 70], 'max_depth' : [3 ,5, 7,8, 11, 12],'min_samples_split' : [2, 3, 5, 9] , 'criterion' : ['gini', 'entropy'], 'max_features':['sqrt','log2'] }`:设置超参数的搜索范围,其中`n_estimators`表示决策树的数目,`max_depth`表示决策树的最大深度,`min_samples_split`表示分裂一个内部节点需要的最小样本数,`criterion`表示用于衡量特征的质量的指标,`max_features`表示在决策树中寻找最佳分割时要考虑的特征数。
4. `gd_rf= GridSearchCV(rf_model , param_grid=prams, n_jobs=-1 ,cv=10)`:使用网格搜索来寻找最佳的超参数组合,其中`rf_model`是随机森林分类器模型,`param_grid`是超参数的搜索范围,`n_jobs`表示要使用的CPU数,-1表示使用所有可用的CPU,`cv`表示交叉验证的折数。
5. `gd_rf.fit(X_train , y_train)`:对训练集进行拟合,寻找最佳的超参数组合。
6. `print(gd_rf.best_estimator_)`:输出寻找到的最佳的随机森林分类器模型。
阅读全文