0729训练模型涉及到的代码

1、sklearn.metrics.roc_curve参数

https://www.cnblogs.com/wzyuan/p/9440017.html
官方文档:
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html

sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, 
sample_weight=None, drop_intermediate=True)

y_true:数组,数据标签的真实值
y_score:数组,可以是对数据标签预测的概率值,置信度值或决策的非阈值度量(如SVM分类器上的‘decision_function’的返回值。)
pos_label:指定正类标签,默认1为正类。
sample_weight:采样权重,可选参数
drop_intermediate:丢掉一些次优阈值,不在ROC曲线上显示,默认为True。

2、seaborn.heatmap()参数

seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None,
 robust=False, annot=None, fmt='.2g', annotkws=None, linewidths=0, 
 linecolor='white', cbar=True, cbarkws=None, cbar_ax=None, square=False,
  ax=None, xticklabels=True, yticklabels=True, mask=None, **kwargs)

cmap:颜色
annot:默认为False,为True时会在格子上显示数字
fmt:数字格式

3、不平衡数据集的处理

SMOTEENN

from imblearn.combine import SMOTEENN
smote_enn = SMOTEENN(random_state=0)
X,y = smote_enn.fit_sample(X,y)
n_sample = y.shape[0]
n_pos_sample = y[y==0].shape[0]
n_neg_sample = y[y==1].shape[0]
print('样本个数:{};正样本占{:.2%};负样本占:{:.2%}'.format(n_sample,
n_pos_sample/n_sample,n_neg_sample/n_sample))

SMOTE

import imblearn
from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state=42)
X,y = sm.fit_sample(X,y)
n_sample = X.shape[0]
pd.Series(y).values_counts()  #不同值的计数 .value_counts()
n_1_sample = pd.Series(y).value_counts()[1]
n_0_sample = pd.Series(y).value_counts()[0]
print('样本个数:{};1占{:.2%};0占:{:.2%}'.format(n_sample,
n_1_sample/n_sample,n_0_sample/n_sample))

5、训练模型(以随机森林为例)

未使用交叉验证

分训练集和测试集
from sklearn.model_selection import train_test_split
Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,random_state=420)
不要打印输出的警告信息
import warnings
warnings.filterwarnings('ignore')

from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=100).fit(Xtrain,Ytrain)  #实例化

from sklearn import metrics
pred = rfc.predict(Xtest)
#predict_proba() 预测测试集中样本点所归属于各个标签的概率,各个标签按词典顺序排列
y_score = rfc.predict_proba(Xtest)[:,1]

acc = metrics.accuracy_score(Ytest,pred)
precision = metrics.precision_score(Ytest,pred)
recall = metrics.recall_score(Ytest,pred)
f1 = metrics.f1_score(Ytest,pred)

auc = metrics.roc_auc_score(Ytest,y_score)

print('准确率:{.4f},精确率:{.4f},召回率:{.4f},f1-score:{:.4f},
auc:{:.4f}'.format(acc,precision,recall,f1,auc2))

使用交叉验证

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
rfc = rfc = RandomForestClassifier(n_estimators=100)

acc = cross_val_score(rfc,X,y,cv=5,scoring='accuracy').mean()
precision = cross_val_score(rfc,X,y,cv=5,scoring='average_precision').mean()
recall = cross_val_score(rfc,X,y,cv=5,scoring='recall').mean()
f1 = cross_val_score(rfc,X,y,cv=5,scoring='f1').mean()
auc = cross_val_score(rfc,X,y,cv=5,scoring='roc_auc').mean()

print('准确率:{.4f},精确率:{.4f},召回率:{.4f},f1-score:{:.4f},
auc:{:.4f}'.format(acc,precision,recall,f1,auc2))

6、混淆矩阵

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(ytest,pred,lables=[1,0])
np.set_printoptions(precision=2)
print(cm)

#可视化混淆矩阵
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(cm,annot=True,fmt='.2e',cmap='GnBu')
plt.show()

7、ROC曲线

from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score as AUC

#y_score是模型预测正例的概率
y_score = rfc.predict_proba(Xtest)[:,1]
#计算不同阈值下,fpr,recall(tpr)的组合值
fpr,recall,thresholds = roc_curve(ytest,y_score)
#计算auc值
area = AUC(ytest,y_score)

#绘制面积图
plt.stackplot(fpr,recall,color='steelblue',alpha=0.5,edgecolor='black')
#添加ROC曲线轮廓
plt.plot(fpr,recall,color='black',lw=1)
#添加对角线
plt.plot([0,1],[0,1],color='red',linestyle='--')
#添加文本信息
plt.text(0.5,0.3,'ROC curve (area=%0.2f)' % area)

plt.xlim([-0.05,1.05])
plt.ylim([-0.05,1.05])
#添加x轴,y轴标签
plt.xlabel('False Positive Rate')
plt.ylabel('Recall')
#显示图形
plt.show()

8、模型的评估

print(' 模型的准确率为: \n',metrics.accuracy_score(y_true,y_test_pred))
print(' 模型的评估报告: \n',metrics.classification_report(y_true,y_test_pred))

9、调参

学习曲线

scorel = []
for i in range(0,200,10):
	rfc = RandomForestClassifier(n_estimators=i+1,n_jobs=-1,random_state=90)
	score = cross_val_score(rfc,X,y,cv=5).mean()
	scorel.append(score)
print(max(scorel),(scorel.index(max(scorel))*10+1))
plt.figure(figsize=[20,5])
plt.plot(range(1,201,10),scorel)
plt.show()

#在确定好范围,进一步细化学习曲线
scorel = []
for i in range(35,45):
	rfc = RandomForestClassifier(n_estimators=i,n_jobs=-1,random_state=90)
	score = cross_val_score(rfc,X,y,cv=5).mean()
	scorel.append(score)
print(max(scorel),([*range(35,45)][scorel.index(max(scorel))]))
plt.figure(figsize=[20,5])
plt.plot(range(35,45),scorel)
plt.show()

网格搜索

from sklearn.model_selection import GridSearchCV

#预设各参数的不同选项值
max_depth = [2,3,4,5,6]
min_samples_split = [2,4,6,8]
min_samples_leaf = [2,4,8,10,12]

#将各参数以字典的形式组织起来
parameters = {'max_depth':max_depth,'min_samples_split':min_samples_split,
'min_samples_leaf',min_samples_leaf}
rfc = RandomForestClassifier(n_estimators=39,random_state=90)
GS = GridSearchCV(rfc,parameters,cv=10)
GS.fit(X,y)
GS.best_params_  #返回最佳组合的参数值
GS.best_score_ 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用Java训练对话模型,您需要以下步骤: 1. 准备数据集:准备包含对话文本的数据集。数据集应该包括一个包含问题和答案对的文件,每个问题和答案应该在不同的行中。 2. 数据预处理:对数据进行预处理以准备输入到模型中。这可以包括标记化、停用词去除、词干提取和向量化等步骤。 3. 训练模型:使用机器学习算法训练对话模型。Java中有多种机器学习框架可供选择,如Weka、Apache Spark、TensorFlow等。 4. 评估模型:使用测试集对模型进行评估,以了解其准确性和性能。 以下是一个使用Weka训练对话模型的示例代码: ``` import weka.core.*; import weka.core.converters.ConverterUtils.DataSource; import weka.core.stemmers.SnowballStemmer; import weka.filters.Filter; import weka.filters.unsupervised.attribute.StringToWordVector; import weka.classifiers.trees.J48; public class DialogueModel { public static void main(String[] args) throws Exception { // Load data DataSource source = new DataSource("dialogue_dataset.arff"); Instances data = source.getDataSet(); // Set class attribute data.setClassIndex(data.numAttributes() - 1); // Preprocess data StringToWordVector filter = new StringToWordVector(); filter.setInputFormat(data); filter.setStemmer(new SnowballStemmer()); Instances preprocessedData = Filter.useFilter(data, filter); // Train model J48 classifier = new J48(); classifier.buildClassifier(preprocessedData); // Evaluate model Evaluation evaluation = new Evaluation(preprocessedData); evaluation.crossValidateModel(classifier, preprocessedData, 10, new Random(1)); System.out.println(evaluation.toSummaryString()); } } ``` 此代码假定您已经将对话数据集转换为ARFF格式,并将其保存在名为“dialogue_dataset.arff”的文件中。它使用Weka库中的StringToWordVector过滤器来对数据进行预处理,并使用J48分类器训练模型。最后,它使用10折交叉验证来评估模型的性能。 ### 回答2: Java对话模型的训练代码通常涉及以下几个基本步骤: 1. 数据预处理:首先需要准备训练数据集,可以是原始的对话文本或者是已经经过标注的数据集。对于原始的对话文本,需要进行分词和去除停用词等预处理操作,以便后续的处理和训练。 2. 构建模型:在训练对话模型之前,需要选择适合的模型结构。常见的模型结构包括基于统计的模型(如n-gram模型)、基于规则的模型(如有限状态自动机)以及基于神经网络的模型(如循环神经网络、Transformer等)。根据需求和数据集特点,选择合适的模型结构。 3. 特征提取:在训练模型之前,需要从数据中提取有意义的特征以供模型使用。特征可以是词向量、句法特征、语义特征等。特征提取可以使用各种工具和库来实现,例如使用开源的机器学习库如TensorFlow、PyTorch等。 4. 模型训练:一旦模型结构和特征都准备好了,可以开始进行模型的训练。根据选定的模型结构,使用训练数据集进行模型参数的优化。这个过程通常使用反向传播算法进行梯度下降优化。训练的目标是尽可能减小模型在训练数据上的误差,提高模型的泛化能力。 5. 模型评估:在训练过程中,需要对模型进行评估以了解其性能。可以使用一部分预留的测试数据集或者交叉验证等方法来评估模型的准确性、召回率、F1值等指标。 6. 模型保存和使用:训练完成后,可以将模型保存起来供之后的使用。保存的方式可以是将模型的参数保存到文件中,或者直接将整个模型保存成二进制文件。之后可以加载保存的模型,并用于对话等任务中。 这些步骤涵盖了Java对话模型训练代码的主要内容。具体的实现方式和代码实例会根据具体的模型结构和数据集特点而异。 ### 回答3: Java对话模型训练是指使用Java编程语言来实现对话模型的训练过程。对话模型训练是指利用机器学习技术,通过大量的对话数据对模型进行训练,使其能够理解和生成具有自然语言交互能力的对话。 在Java中实现对话模型训练需要借助一些机器学习库和工具。首先,我们可以使用Apache OpenNLP来进行自然语言处理,例如对文本进行分词、句法分析等。其次,可以使用深度学习框架如TensorFlow或者Keras来构建对话模型。这些框架提供了各种层和模型架构,可以用于实现循环神经网络(RNN)或者变换器(Transformer)等不同类型的对话模型。 对话模型的训练过程通常包括数据预处理、模型构建和训练三个主要步骤。在数据预处理阶段,我们需要将原始对话数据进行清洗、分词、编码等操作,以便用于后续的模型训练。接着,根据具体的模型架构,我们可以设计并构建对应的模型。最后,在训练阶段,我们可以使用梯度下降等优化算法对模型进行迭代优化,使其逐渐提高对话的准确性和流畅度。 在模型训练之后,我们可以将经过训练的模型保存下来,以便在实际应用中使用。对话模型可以应用于各种场景,例如智能客服、语音助手和聊天机器人等,通过模型的生成能力,使得机器能够更加智能地理解和回答用户的问题,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值