分类期望反射

expectation-reflection的Python项目详细描述


期望反射(ER)是一种乘法优化方法,它根据目标观测值与其相应模型期望值的比值来训练特征与目标之间的交互权重。停止迭代作为一种度量模型的有效性的方法,可以将其作为一个成本最小化的函数。在

这种方法的优点: (1) 即使在小样本的情况下,工作也相对良好; (2) 只使用一个超参数; (3) 能够演示系统机制。在

在当前版本中,ER classification可以作为分类器(用于二进制和多项式任务)。regression的扩展将很快出现。在

安装

来自PyPI
pip install expectation-reflection
来自存储库
^{pr2}$

使用

ER的实现与sklearn中其他分类器的实现非常相似,基本上包括以下步骤。在

  • expectation_reflection包导入python脚本:
fromexpectation_reflectionimportclassificationasER
  • 选择模型:
model=ER.model(max_iter=100,reg=0.01,random_state=1)
  • 将您的dataset.txt导入python脚本。在
Xy=np.loadtxt('dataset.txt')
  • 从数据集中选择功能和目标。如果目标是最后一列,则
X,y=Xy[:,:-1],Xy[:,-1]
  • sklearn导入train_test_split,将数据拆分为训练集和测试集:
fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.5,random_state=1)
  • 使用(X_train, y_train)集训练模型:
model.fit(X_train,y_train)
  • 预测新数据集y_pred的输出类及其概率p_pred
y_pred=model.predict(X_test)print('predicted output:',y_pred)p_pred=model.predict_proba(X_test)print('predicted probability:',p_pred)
  • 截距和相互作用权重:
print('intercept:',model.intercept_)print('interaction weights:',model.coef_)

超参数优化

ER只有一个超参数reg,可以通过使用sklearn中的GridSearchCV对其进行优化:

fromsklearn.model_selectionimportGridSearchCVmodel=ER.model(max_iter=100,random_state=1)reg=[0.0001,0.001,0.01,0.1,0.5,1.]hyper_parameters=dict(reg=reg)clf=GridSearchCV(model,hyper_parameters,cv=4,n_jobs=-1,iid='deprecated')best_model=clf.fit(X_train,y_train)
  • 最佳超参数:
print('best_hyper_parameters:',best_model.best_params_)
  • 预测输出y_pred及其概率p_pred
y_pred=best_model.best_estimator_.predict(X_test)print('predicted output:',y_pred)p_pred=best_model.best_estimator_.predict_proba(X_test)print('predicted probability:',p_pred)

性能评估

我们可以使用metrics中的metrics来衡量模型性能:

fromsklearn.metricsimportaccuracy_score,precision_score,recall_score,f1_score,\
roc_auc_score,roc_curve,aucacc=accuracy_score(y_test,y_pred)print('accuracy:',acc)precision=precision_score(y_test,y_pred)print('precision:',precision)recall=recall_score(y_test,y_pred)print('recall:',recall)f1score=f1_score(y_test,y_pred)print('f1score:',f1score)roc_auc=roc_auc_score(y_test,p_pred)## note: it is p_pred, not y_predprint('roc auc:',roc_auc)

ROC AUC也可计算为

fp,tp,thresholds=roc_curve(y_test,p_pred,drop_intermediate=False)roc_auc=auc(fp,tp)print('roc auc:',roc_auc)

引文

如果您在工作中使用此软件包,请引用以下文件:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在JSP中添加自定义隐式对象   java MasterMindResource泄漏?   不同的c#java结果加密   java为什么安卓 studio显示“constraintlayout中缺少约束”错误?   java Make Logback将日志打印到文件中   java如何在Google应用程序引擎中设置日期时间?   jeditorpane如何阻止java HTMLEditorKit自动关闭我的标记   返回到Activity onCreate()时,不会调用java函数   java为什么我在这个对象上得到一个NullPointerException?   在java中,如何使用包含数组的参数调用图形方法?   java如何在Play framework 2应用程序中存储Akka参与者列表?   ssh使用java将文件从一个solaris 9复制到另一个solaris 9   网络Java服务器正在等待客户端响应   java Spring mvc从formBackingObject()重定向到页面   java Spark:JavaRDD<Tuple2>到javapairdd<>   java如何动态调用基类中由字符串值指定的子类方法?