IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 数据分析笔记5:建模评估 -> 正文阅读

[人工智能]数据分析笔记5:建模评估

我们采用sklearn这个库来进行建模和评估

1.分割训练集和测试集

先来简单介绍一下数据分割的函数:train_test_split,资料来源于sklearn的官方文档

X_train,X_test,y_train,y_test=
sklearn.model_selection.train_test_split(train_data,train_target, test_size=None,train_size=None, random_state=None, shuffle=True, stratify=None)

参数:

train_data:待划分的样本特征集合

train_target:待划分的样本标签

**test_size:**输入在0-1间表示测试集的样本比例,输入整数表示测试集样本数目

train_size:输入0-1间表示要包含在训练拆分中的数据集的比例,整数表示样本的数目

**random_state:**随机种子,即划分标记

**shuffle:**是否打乱数据顺序再划分,默认True

**stratify:**表示按指定列进行分层采样

返回值:

**X_train:**划分出的训练集数据

**X_test:**划分出的测试集数据

**y_train:**划分出的训练集标签

**y_test:**划分出的测试集标签

from sklearn.model_selection import train_test_split

data=pd.read_csv(r'C:\Users\45168\Desktop\hands-on-data-analysis-master\第三章项目集合\clear_data.csv')
train=pd.read_csv(r'C:\Users\45168\Desktop\hands-on-data-analysis-master\第三章项目集合\train.csv')

X=data
y=train['Survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)

2.模型建立

具体各个模型的参数及使用方法不详细介绍,这里只是作为数据分析的步骤进行演示。

逻辑斯蒂回归

默认参数使用逻辑斯蒂回归:
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier

lr = LogisticRegression() #默认参数
lr.fit(X_train, y_train)

#查看分数
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr.score(X_test, y_test)))

带参数:
lr2 = LogisticRegression(C=100)
lr2.fit(X_train, y_train)

print("Training set score: {:.2f}".format(lr2.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr2.score(X_test, y_test)))

随机森林分类:

默认参数:
rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)

print("Training set score: {:.2f}".format(rfc.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(rfc.score(X_test, y_test)))
带参数:
rfc2 = RandomForestClassifier(n_estimators=100, max_depth=5)
rfc2.fit(X_train, y_train)

print("Training set score: {:.2f}".format(rfc2.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(rfc2.score(X_test, y_test)))

3.预测结果

pred = lr.predict(X_train)
pred

可以看到pred是一个数组,且里面的元素都是0,1构成的

接下来我们查看预测标签的概率:

pred_proba = lr.predict_proba(X_train)
pred_proba

4.模型评估

建模之后,我们往往需要对模型进行评估。模型评估的目的是了解模型的泛化性能,简单来说就是模型的解释性是否满足要求。

模型评估常用的一种技术叫做K折交叉验证,K是用户指定的数字,通常取5或者10。交叉验证的意思就是把原始数据集分成训练集和测试集,我们利用训练集进行模型训练,利用测试集来评估模型的性能。

下面介绍几个术语:

  • 准确率(precision):度量的是被预测为正例的样本中有多少是真正的正例
  • 召回率(recall):度量的是正类样本中有多少被预测为正类
  • f-分数是准确率与召回率的调和平均

4.1 交叉验证

#交叉验证函数的库  
from sklearn.model_selection import cross_val_score

lr = LogisticRegression(C=100)
scores = cross_val_score(lr, X_train, y_train, cv=10)

#查看分数
scores

注意:K值的选取不是越大越好,具体情况要具体分析,在2017年的一项研究中给出了如下经验公式:

K=ln(n),且n/K>3d,n是数据量,d是特征数。

这里是论文:Jung, Y., 2017. Multiple predicting K-fold cross-validation for model selection. Journal of Nonparametric Statistics, pp.1-19.

4.2 混淆矩阵

这里简单介绍一下二分类问题的混淆矩阵

二分类矩阵如下构成:

请添加图片描述

TP = True Postive = 真阳性

FP = False Positive = 假阳性

FN = False Negative = 假阴性

TN = True Negative = 真阴性

比如:

真实值:0 1 0 0 1 1

预测值:0 1 1 1 0 1

则TP=2,FN=1,FP=2,TN=1

● 精度(precision)= TP/(TP+FP)

● 召回(recall,敏感度,真阳率)= TP/(TP+FN)

● 准确率(Accuracy)= (TP+TN)/(TP+FN+FP+TN)

● F1 = 2*TP / (2*TP+FP+FN)

from sklearn.metrics import confusion_matrix  #混淆矩阵所在的库

#训练模型
lr = LogisticRegression(C=100)
lr.fit(X_train, y_train)

pred = lr.predict(X_train) #预测结果
confusion_matrix(y_train, pred) #输出混淆矩阵
from sklearn.metrics import classification_report 
print(classification_report(y_train, pred))  #输出precision,recall,f1的值

4.3 ROC曲线

具体的介绍可以参考这一篇文章,讲的很通俗易懂

https://zhuanlan.zhihu.com/p/26293316

from sklearn.metrics import roc_curve  #导入绘制roc曲线的库

fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(X_test))
plt.plot(fpr, tpr, label="ROC Curve")
plt.xlabel("FPR")
plt.ylabel("TPR (recall)")
# 找到最接近于0的阈值
close_zero = np.argmin(np.abs(thresholds))
plt.plot(fpr[close_zero], tpr[close_zero], 'o', markersize=10, label="threshold zero", fillstyle="none", c='k', mew=2)
plt.legend(loc=4)

ROC曲线一个重要的性质就是:曲线下方与坐标轴所谓面积越大越好。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:06:37  更:2021-08-26 12:08:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:36:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码