5.实操(美国两党预测)

2023-11-22 02:50
文章标签 实操 预测 美国 两党

本文主要是介绍5.实操(美国两党预测),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、数据预览
    • 1.Data.head()
    • 2. Class分布预览
    • 1.3 其他
    • 1.4 问题
  • 二、数据预处理
    • 2.1 将class值从REP、DEM变成0,1
    • 2.2 one-hot变换
    • 2.3 测试集、训练集分离
  • 三、模型构建
    • 3.1 随机森林
  • 四、Stacking
    • 4.1 构建一个字典来存储各个模型
    • 4.2 用各个模型训练_预测测试集

一、数据预览

1.Data.head()

在这里插入图片描述

2. Class分布预览

在这里插入图片描述

1.3 其他

  • 无缺失值
  • class 名称是 'cand_pty_affiliation '

1.4 问题

  1. 将class值从REP、DEM变成0,1
  2. 要进行one-hot变换

二、数据预处理

2.1 将class值从REP、DEM变成0,1

data['cand_pty_affiliation'] = data[['cand_pty_affiliation']].replace({'REP':1,'DEM':0})

2.2 one-hot变换

首先将属性和class分离开

X = data.drop(['cand_pty_affiliation'],axis=1)
y = data['cand_pty_affiliation']

再进行one-hot变换,转成稀疏格式

X = pd.get_dummies(X,sparse=True)

2.3 测试集、训练集分离

from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(X, y, test_size=0.4, random_state=33)

因为数据有点多,训练集就取60%,方便计算

三、模型构建

3.1 随机森林

不断地用Grid SearchCV调试参数

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
parameters = {'max_depth':np.arange(14,18),'min_samples_split':np.arange(5,8)} 
clf = GridSearchCV(estimator=RandomForestClassifier(n_estimators=186,random_state=33,n_jobs=-1),param_grid=parameters,cv=5,n_jobs=-1,scoring='roc_auc')
clf.fit(train_x,train_y)
print(clf.best_score_)
print(clf.best_params_) 

得到最优的参数模型

rf = RandomForestClassifier(max_depth=17,min_samples_split=5,n_estimators=186,random_state=33,n_jobs=-1)

四、Stacking

4.1 构建一个字典来存储各个模型

各个模型在之前都已经找到最优参数了

from sklearn.svm import SVC, LinearSVC
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.kernel_approximation import Nystroem
from sklearn.kernel_approximation import RBFSampler
from sklearn.pipeline import make_pipelineSEED =33 # 设置随机种子
def get_models():"""Generate a library of base learners."""nb = GaussianNB()svc = SVC(C=100, probability=True)knn = KNeighborsClassifier(n_neighbors=3)lr = LogisticRegression(C=100, random_state=SEED)nn = MLPClassifier((80, 10), early_stopping=False, random_state=SEED)gb = GradientBoostingClassifier(n_estimators=100, random_state=SEED)rf = RandomForestClassifier(max_depth=17,min_samples_split=5,n_estimators=186,random_state=SEED,n_jobs=-1)models = {'svm': svc,'knn': knn,'naive bayes': nb,'mlp-nn': nn,'random forest': rf,'gbm': gb,'logistic': lr,}return models  #返回字典对象,key:各个模型的名字; value: 各个调好参数的模型  

在这里插入图片描述

4.2 用各个模型训练_预测测试集

def train_predict(models):"""Fit models in list on training set and return preds"""#np.zeros(行,列)初始化一个array对象用来存储各个模型预测的值,行就是每个样本,列则是每个模型#np.zeros行的值 = ytest.shape[0],也就是test_y的数量; 列的值=len(model_list),也就是传进来的models对象,里有几个模型P = np.zeros((test_y.shape[0], len(models)))P = pd.DataFrame(P)print("Fitting models.")cols = list()for i, (name, m) in enumerate(models.items()):print("%s..." % name, end=" ", flush=False)m.fit(train_x, train_y)P.iloc[:, i] = m.predict_proba(xtest)[:, 1] #将模型i预测的值赋值到P中cols.append(name) #加上列名print("done")P.columns = colsprint("Done.\n")return P

获得每个基础模型的分数

def score_models(P, y):"""Score model in prediction DF"""print("Scoring models.")for m in P.columns:score = roc_auc_score(y, P.loc[:, m])print("%-26s: %.3f" % (m, score))print("Done.\n")    
SEED=33
models = get_models()
P = train_predict(models)
score_models(P, test_y)

Scoring models.
knn : 0.838
naive bayes : 0.818
mlp-nn : 0.891
random forest : 0.904
gbm : 0.889
logistic : 0.862
Done.

使用ML-Ensemble模块,将各个模型生成的预测值最为属性,看互相的相关性热力图

# You need ML-Ensemble for this figure: you can install it with: pip install mlens
from mlens.visualization import corrmatcorrmat(P.corr(), inflate=False)
plt.show()

相关性不高,且每个模型的预测值偏高,就证明该模型可以被用来stacking
在这里插入图片描述

stacking_predict = P.mean(axis=1)print("Ensemble ROC-AUC score: %.3f" % roc_auc_score(test_y, P.mean(axis=1)))

Ensemble ROC-AUC score: 0.899

from sklearn.metrics import roc_curvedef plot_roc_curve(test_y, P_base_learners, P_ensemble, labels, ens_label):#test_y = 测试集的真实值 ;P_base_learners = 各个模型预测生成的新的属性值;#P_ensemble = 各个模型预测值的合并预测值,此处是用平均#labels= 各个模型名称list  ;  ens_label 的名称,这里命名为'ensemble'plt.figure(figsize=(10, 8))plt.plot([0, 1], [0, 1], 'k--') # 画出基础对角线cm = [plt.cm.rainbow(i)for i in np.linspace(0, 1.0, P_base_learners.shape[1] + 1)]for i in range(P_base_learners.shape[1]):p = P_base_learners[:, i]fpr, tpr, _ = roc_curve(test_y, p)plt.plot(fpr, tpr, label=labels[i], c=cm[i + 1])fpr, tpr, _ = roc_curve(test_y, P_ensemble)plt.plot(fpr, tpr, label=ens_label, c=cm[0])plt.xlabel('False positive rate')plt.ylabel('True positive rate')plt.title('ROC curve')plt.legend(frameon=False)plt.show()
plot_roc_curve(test_y, P.values, P.mean(axis=1), list(P.columns), "ensemble")

在这里插入图片描述

base_learners = get_models()from mlens.ensemble import SuperLearner
# Instantiate the ensemble with 10 folds
sl = SuperLearner(folds=10,random_state=SEED,verbose=2,backend="multiprocessing"# Add the base learners and the meta learner
sl.add(list(base_learners.values()), proba=True) 
sl.add_meta(meta_learner, proba=True)
# Train the ensemble
sl.fit(train_x.values, train_y.values)
# Predict the test set
p_sl = sl.predict_proba(test_x.values)
print("\nSuper Learner ROC-AUC score: %.3f" % roc_auc_score(test_y, p_sl[:, 1])))

在这里插入图片描述

这篇关于5.实操(美国两党预测)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406964

相关文章

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

STM32 HAL CAN通讯 实操

1、简介 相比于串口通讯,对于刚接触CAN通讯的小白来说,CAN通讯相对复杂,看各种视频、帖子理论,总是一知半解。本次通过傻瓜式操作,先实现CAN通讯的交互,以提高小白的信心,也便于自己复习观看。本次以STM32CubeMX进行初始化配置,通过Keil 5软件进行软件设计,通过CAN盒实现进行数据的交互。该流程实际以STM32F0、F1、F3、F4、F7实测好用(理论上都适用),这三种型号单片机

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem   [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页  我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索c

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

结合Python与GUI实现比赛预测与游戏数据分析

在现代软件开发中,用户界面设计和数据处理紧密结合,以提升用户体验和功能性。本篇博客将基于Python代码和相关数据分析进行讨论,尤其是如何通过PyQt5等图形界面库实现交互式功能。同时,我们将探讨如何通过嵌入式预测模型为用户提供赛果预测服务。 本文的主要内容包括: 基于PyQt5的图形用户界面设计。结合数据进行比赛预测。文件处理和数据分析流程。 1. PyQt5 图形用户界面设计

CNN-LSTM模型中应用贝叶斯推断进行时间序列预测

这篇论文的标题是《在混合CNN-LSTM模型中应用贝叶斯推断进行时间序列预测》,作者是Thi-Lich Nghiem, Viet-Duc Le, Thi-Lan Le, Pierre Maréchal, Daniel Delahaye, Andrija Vidosavljevic。论文发表在2022年10月于越南富国岛举行的国际多媒体分析与模式识别会议(MAPR)上。 摘要部分提到,卷积

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测 目录 多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测(完整源码和数据) 2.SS

力扣 | 递归 | 区间上的动态规划 | 486. 预测赢家

文章目录 一、递归二、区间动态规划 LeetCode:486. 预测赢家 一、递归 注意到本题数据范围为 1 < = n < = 20 1<=n<=20 1<=n<=20,因此可以使用递归枚举选择方式,时间复杂度为 2 20 = 1024 ∗ 1024 = 1048576 = 1.05 × 1 0 6 2^{20} = 1024*1024=1048576=1.05 × 10^