机器学习-模型评估优化

这篇具有很好参考价值的文章主要介绍了机器学习-模型评估优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

过拟合与欠拟合

任务:
拟合反应速率(rate)与温度(temperature)数据,预测85度时的反应速率
机器学习-模型评估优化,人工智能,机器学习,人工智能
机器学习-模型评估优化,人工智能,机器学习,人工智能
欠拟合
机器学习-模型评估优化,人工智能,机器学习,人工智能
过拟合
机器学习-模型评估优化,人工智能,机器学习,人工智能
例2:
机器学习-模型评估优化,人工智能,机器学习,人工智能
机器学习-模型评估优化,人工智能,机器学习,人工智能
欠拟合

机器学习-模型评估优化,人工智能,机器学习,人工智能

过拟合
机器学习-模型评估优化,人工智能,机器学习,人工智能
欠拟合与过拟合
模型不合适,导致其无法对数据实现有效预测
模型对数据的预测情况

训练数据 预测数据
欠拟合 不准确 不准确
过拟合 准确 不准确
好模型 准确 准确

欠拟合可以通过观察训练数据及时发现,通过优化模型结果解决
如何解决过拟合问题
原因:

  • 模型结构过于复杂(维度过高)
  • 使用了过多属性,模型训练时包含了干扰项信息

解决办法:

  • 简化模型结构(使用低阶模型,比如线性模型)
  • 数据预处理,保留主成分信息(数据PCA处理)
  • 在模型训练时,增加正则化项(regularization)

增加正则项
机器学习-模型评估优化,人工智能,机器学习,人工智能
机器学习-模型评估优化,人工智能,机器学习,人工智能
机器学习-模型评估优化,人工智能,机器学习,人工智能
机器学习-模型评估优化,人工智能,机器学习,人工智能

数据分离与混淆矩阵

建立模型的意义,不在于对训练数据做出准确预测,更在与对新数据的准确预测
对全数据进行数据分离,部分用于训练,部分用于新数据的结果预测
分离训练数据与测试数据

  1. 把数据分成两部分:训练集、测试集
  2. 使用训练集数据进行模型训练
  3. 使用测试集数据进行预测,更有效地评估模型对于新数据的预测表现

混淆矩阵(Confusion Matrix)
分类任务中,计算测试数据集预测准确率(accuracy)以评估模型表现
局限性:无法真实反映模型针对各个分类的预测准确度
准确率可以方便的用于衡量模型的整体预测效果,但无法反应细节信息,具体表现在:

  • 没有体现数据预测的实际分布情况
  • 没有体现模型的错误预测的类型

混淆矩阵,又称为误差矩阵,用于衡量分类算法的准确程度
机器学习-模型评估优化,人工智能,机器学习,人工智能
通过混淆矩阵,计算更丰富的模型评估指标
机器学习-模型评估优化,人工智能,机器学习,人工智能
特点:

  • 分类任务中,相比单一的预测准确率,混淆矩阵提供了更全面的模型评估信息(TP\TN\FP\FN)
  • 通过混淆矩阵,我们可以计算出多样的模型表现衡量指标,从而更好地选择模型

衡量指标的选择取决于应用场景

  • 垃圾邮件检测(正样本为“垃圾邮件”):希望普通邮件(负样本)不要被判断为垃圾邮件(正样本),即:判断为垃圾邮件的样本都是判断正确的,需要关注精确率,还希望所有的垃圾邮件尽可能被判断出来,需要关注召回率
  • 异常交易检测(正样本为“异常交易”):希望判断为正常的交易(负样本)中尽可能不存在异常交易,还需要工作特异度

模型优化

数据质量决定模型表现的上限

  • 数据属性的意义,是否为无关数据
  • 不同属性数据的数量级差异性如何
  • 是否有异常数据
  • 采集数据的方法是否合理,采集到的数据是否有代表性
  • 对于标签结果,要确保标签判定规则的一致性(统一标准)

数据操作:

  • 删除不必要的属性 - 减少过拟合、节约运算时间
  • 数据预处理:归一化、标准化 - 平衡数据影响,加快训练收敛
  • 确定是否保留或过滤掉异常数据 - 提高鲁棒性
  • 尝试不同的模型,对比模型表现 - 帮助确定更合适的模型

目标:
在确定模型类别后,如何让模型表现更好、
三方面:数据、模型核心参数、正则化
尝试以下方法:

  • 遍历核心参数组合,评估对应模型表现(比如:逻辑回归边界函数考虑多项式、KNN尝试不同的n_neighbors值)
  • 扩大数据样本
  • 增加或减少数据属性
  • 对数据进行降维处理
  • 对模型进行正则化处理,调整正则项的数值

选择使用KNN模型,尝试不同n_neighbors值对结果的影响
机器学习-模型评估优化,人工智能,机器学习,人工智能

  • KNN模型中,模型复杂度由n_neighbors值决定
  • n_neighbors值越小,模型复杂度越高

机器学习-模型评估优化,人工智能,机器学习,人工智能
训练数据集准确率 随着模型复杂而提高
测试数据集准确率 在模型过于简单或过于复杂的情况时下降

实战准备

实战-酶活性预测

机器学习-模型评估优化,人工智能,机器学习,人工智能
生成新数据并用于预测

X_range = np.linspace(40,90,300).reshape(-1,1)
y_range_predict = lr1.predict(X_range)

生成多项式(二次)数据:

from sklearn.preprocessing import PolynomialFeatures
poly2=PolynomialFeatures(degree=2)
X_2_train = poly2.fit_transform(X_train)
X_2_test = poly2.transform(X_test)

实战-质量好坏预测
机器学习-模型评估优化,人工智能,机器学习,人工智能
数据分离

from skklearn.model_selection import train_test_split
X_train,X_test,Y_train,y_test = train_test_split(X,y,random_state=4,test_size=0.4)

机器学习-模型评估优化,人工智能,机器学习,人工智能
生成决策区域数据:

xx,yy = np.meshgrid(np.arange(0,10,0.05),np.arange(0,10,0.05))
x_range = np.c_[xx.ravel(),yy.ravel()]
y_range_predict = knn.predict(x_range)

可视化决策区域

bad_knn = plt.scatter(x_range[:,0][y_range_predict==0],x_range[:,1][y_range_predict==0])
good_knn = plt.scatter(x_range[:,0][y_range_predict==1],x_range[:,1][y_range_predict==1])

计算混淆矩阵:

from sklearn.metrics import confusion_matrix
cm= = confusion_matrix(y_test,y_test_predict)
TP = cm[1,1]
TN = cm[0,0]
FP = cm[0,1]
FN = cm[1,0]

机器学习-模型评估优化,人工智能,机器学习,人工智能

实战-酶活性预测

机器学习-模型评估优化,人工智能,机器学习,人工智能

  1. 基于T-R-train.csv数据,建立线性回归模型,计算其在T-R-test.csv数据上的r2分数,可视化模型预测结果
  2. 加入多项式特征(2次、5次),建立回归模型
  3. 计算多项式回归模型对测试数据进行预测的r2分数,判断哪个模型预测更准确
  4. 可视化多项式回归模型数据预测结果,判断哪个模型预测更准确

导包加载数据

import pandas as pd
import numpt as np
data_train = pd.read_csv('T-R-train.csv')

赋值

X_train = data_train.loc[:,'T']
y_train = data_train.loc[:,'rate']

可视化

from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(5,5))
plt.scatter(X_train,y_train)
plt.title('raw data')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

线性回归

X_train = np.array(X_train).reshape(-1,1)
from sklearn.linear_model import LinearRegression
lr1 = LinearRegression()
lr1.fit(X_train,y_train)

加载测试数据

data_test = pd.read_csv('T-R-test.csv')
X_test = data_test.loc[:,'T']
y_test = data_test.loc[:,'rate']

计算r2分数

X_test = np.array(X_test).reshape(-1,1)
y_train_predict = lr1.predict(X_train)
y_test_predict = lr1.predict(X_test)
from sklearn.metrics import r2_score
r2_train = r2_score(y_train,y_train_predict)
r2_test = r2_score(y_test,y_test_predict)
print('training r2:',r2_train)
print('test r2',r2_test)

机器学习-模型评估优化,人工智能,机器学习,人工智能
可视化模型预测结果

X_range = np.linspace(40,90,300).reshape(-1,1)
y_range_predict = lr1.predict(X_range)
fig2=plt.figure(figsize=(5,5))
plt.plot(X_range,y_range_predict)
plt.scatter(X_train,y_train)
plt.title('prediction data')
plt.xlabel('trediction data')
plt.ylabel('rate')
plt.show()

机器学习-模型评估优化,人工智能,机器学习,人工智能
多项式模型

from sklearn.preprocessing import PolynomialFeatures
poly2 = PolynomialFeatures(degree=2)
X_2_train = poly2.fit_transform(X_train)
X_2_test = poly2.transform(X_test)

r2分数

lr2 = LinearRegression()
lr2.fit(X_2_train,y_train)
y_2_train_predict = lr2.predict(X_2_train)
y_2_test_predict = lr2.predict(X_2_test)
r2_2_train = r2_score(y_train,y_2_train_predict)
r2_2_test = r2_score(y_test,y_2_test_predict)
print('training r2_2:',r2_2_train)
print('test r2_2',r2_2_test)

机器学习-模型评估优化,人工智能,机器学习,人工智能
可视化

X_2_range = np.linspace(40,90,300).reshape(-1,1)
X_2_range = poly2.transform(X_2_range)
y_2_range_predict = lr2.predict(X_2_range)
fi3=plt.figure(figsize=(5,5))
plt.plot(X_range,y_2_range_predict)
plt.scatter(X_train,y_train)
plt.scatter(X_test,y_test)
plt.title('polynomial prediction resilt(2)')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

机器学习-模型评估优化,人工智能,机器学习,人工智能
5次多项式

from sklearn.preprocessing import PolynomialFeatures
poly5 = PolynomialFeatures(degree=5)
X_5_train = poly5.fit_transform(X_train)
X_5_test = poly5.transform(X_test)
lr5 = LinearRegression()
lr5.fit(X_5_train,y_train)
y_5_train_predict = lr5.predict(X_5_train)
y_5_test_predict = lr5.predict(X_5_test)
r2_5_train = r2_score(y_train,y_5_train_predict)
r2_5_test = r2_score(y_test,y_5_test_predict)
print('training r2_5:',r2_5_train)
print('test r2_5',r2_5_test)

机器学习-模型评估优化,人工智能,机器学习,人工智能

X_5_range = np.linspace(40,90,300).reshape(-1,1)
X_5_range = poly5.transform(X_5_range)
y_5_range_predict = lr5.predict(X_5_range)
fi4=plt.figure(figsize=(5,5))
plt.plot(X_range,y_5_range_predict)
plt.scatter(X_train,y_train)
plt.scatter(X_test,y_test)
plt.title('polynomial prediction resilt(5)')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

机器学习-模型评估优化,人工智能,机器学习,人工智能

实战-质量好坏预测

机器学习-模型评估优化,人工智能,机器学习,人工智能

  1. 基于data_class_raw.csv数据,根据高斯分布概率密度函数,寻找异常点并剔除
  2. 基于data_class_processed.csv数据,进行PCA处理,确定重要数据维度及成分
  3. 完成数据分离,数据分离参数:random_state=4,test_size=0.4
  4. 建立KNN模型完成分类,n_neighbors取10,计算分类准确率,可视化分类边界
  5. 计算测试数据集对应的混淆矩阵,计算准确率、召回率、特异度、精确率、F1分数
  6. 尝试不同的n_neighbors(1-20),计算其在训练数据集、测试数据集上的准确率并作图

导包 加载数据

import pandas as pd
import numpy as np
data = pd.read_csv('data_class_raw.csv')

赋值

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

可视化

from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(5,5))
bad = plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])
good = plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
plt.legend((good,bad),('good','bad'))
plt.title('raw data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

机器学习-模型评估优化,人工智能,机器学习,人工智能
异常检测

from sklearn.covariance import EllipticEnvelope
ad_model = EllipticEnvelope(contamination=0.02)
ad_model.fit(X[y==0])
y_predict_bad = ad_model.predict(X[y==0])

可视化

fig2 = plt.figure(figsize=(5,5))
bad = plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])
good = plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
plt.scatter(X.loc[:,'x1'][y==0][y_predict_bad==-1],X.loc[:,'x2'][y==0][y_predict_bad==-1],marker='x',s=150)
plt.legend((good,bad),('good','bad'))
plt.title('raw data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

机器学习-模型评估优化,人工智能,机器学习,人工智能
加载数据并赋值

data = pd.read_csv('data_class_processed.csv')
data.head()
#define X and y
X = data.drop(['y'],axis=1)
y = data.loc[:,'y']

PCA

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
X_norm = StandardScaler().fit_transform(X)
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X_norm)
var_ratio = pca.explained_variance_ratio_
print(var_ratio)
fig4 = plt.figure(figsize=(5,5))
plt.bar([1,2],var_ratio)
plt.show()

机器学习-模型评估优化,人工智能,机器学习,人工智能
数据分离

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=4,test_size=0.4)
print(X_train.shape,X_test.shape,X.shape)

机器学习-模型评估优化,人工智能,机器学习,人工智能
KNN
模型训练 计算分类准确率

#knn model
from sklearn.neighbors import KNeighborsClassifier
knn_10 = KNeighborsClassifier(n_neighbors=10)
knn_10.fit(X_train,y_train)
y_train_predict = knn_10.predict(X_train)
y_test_predict = knn_10.predict(X_test)

#calculate the accuracy
from sklearn.metrics import accuracy_score
accuracy_train = accuracy_score(y_train,y_train_predict)
accuracy_test = accuracy_score(y_test,y_test_predict)
print("trianing accuracy:",accuracy_train)
print('testing accuracy:',accuracy_test)

机器学习-模型评估优化,人工智能,机器学习,人工智能
可视化分类边界

xx, yy = np.meshgrid(np.arange(0,10,0.05),np.arange(0,10,0.05))
x_range = np.c_[xx.ravel(),yy.ravel()]
y_range_predict = knn_10.predict(x_range)

fig4 = plt.figure(figsize=(10,10))
knn_bad = plt.scatter(x_range[:,0][y_range_predict==0],x_range[:,1][y_range_predict==0])
knn_good = plt.scatter(x_range[:,0][y_range_predict==1],x_range[:,1][y_range_predict==1])
bad = plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])
good = plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
plt.legend((good,bad,knn_good,knn_bad),('good','bad','knn_good','knn_bad'))
plt.title('prediction result')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

机器学习-模型评估优化,人工智能,机器学习,人工智能
计算测试数据集对应的混淆矩阵,计算准确率、召回率、特异度、精确率、F1分数

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test,y_test_predict)
print(cm)

机器学习-模型评估优化,人工智能,机器学习,人工智能
赋值

TP = cm[1,1]
TN = cm[0,0]
FP = cm[0,1]
FN = cm[1,0]
print(TP,TN,FP,FN)

机器学习-模型评估优化,人工智能,机器学习,人工智能
准确率

accuracy = (TP + TN)/(TP + TN + FP + FN)
print(accuracy)

机器学习-模型评估优化,人工智能,机器学习,人工智能
召回率

recall = TP/(TP + FN)
print(recall)

机器学习-模型评估优化,人工智能,机器学习,人工智能
特异度

specificity = TN/(TN + FP)
print(specificity)

机器学习-模型评估优化,人工智能,机器学习,人工智能
精确率

precision = TP/(TP + FP)
print(precision)

机器学习-模型评估优化,人工智能,机器学习,人工智能
F1分数

f1 = 2*precision*recall/(precision+recall)
print(f1)

机器学习-模型评估优化,人工智能,机器学习,人工智能
尝试不同的n_neighbors(1-20),计算其在训练数据集、测试数据集上的准确率并作图

n = [i for i in range(1,21)]
accuracy_train = []
accuracy_test = []
for i in n:
    knn = KNeighborsClassifier(n_neighbors=i)
    knn.fit(X_train,y_train)
    y_train_predict = knn.predict(X_train)
    y_test_predict = knn.predict(X_test)
    accuracy_train_i = accuracy_score(y_train,y_train_predict)
    accuracy_test_i = accuracy_score(y_test,y_test_predict)
    accuracy_train.append(accuracy_train_i)
    accuracy_test.append(accuracy_test_i)
print(accuracy_train,accuracy_test)

可视化

fig5 = plt.figure(figsize=(12,5))
plt.subplot(121)
plt.plot(n,accuracy_train,marker='o')
plt.title('training accuracy vs n_neighbors')
plt.xlabel('n_neighbors')
plt.ylabel('accuracy')
plt.subplot(122)
plt.plot(n,accuracy_test,marker='o')
plt.title('testing accuracy vs n_neighbors')
plt.xlabel('n_neighbors')
plt.ylabel('accuracy')

plt.show()

机器学习-模型评估优化,人工智能,机器学习,人工智能文章来源地址https://www.toymoban.com/news/detail-814087.html

到了这里,关于机器学习-模型评估优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 打造你的专属大模型,学完即可使用上岗!技术人的大模型课程(人工智能/机器学习/深度学习)

    技术人的大模型课 让一部分人在大模型时代,先拥抱AI,为编程专家开启AI新篇章 在2024年,大模型不再是可选技能,而是技术行业的必备。你是否曾在夜深人静时想象,从一名代码专家转型为AI行业的引领者? 如果你的答案是肯定的,那么这门课程正是为你量身定制, 针对

    2024年04月27日
    浏览(48)
  • 精华整理几十个Python数据科学、机器学习、深度学习、神经网络、人工智能方面的核心库以及详细使用实战案例,轻松几行代码训练自己的专有人工智能模型

    精华整理几十个Python数据科学、机器学习、深度学习、神经网络、人工智能方面的核心库以及详细使用实战案例,轻松几行代码训练自己的专有人工智能模型。 机器学习 人工智能的核心,是使计算机具有智能的根本途径。机器学习专注于算法,允许机器学习而不需要编程,

    2024年01月25日
    浏览(71)
  • 基于深度学习的人工智能安全:威胁检测、攻击防御和安全评估

    作者:禅与计算机程序设计艺术 随着人工智能技术的不断发展,给社会带来的影响越来越大。越来越多的企业和个人都依赖于AI产品或服务,同时也面临着各种各样的安全风险,比如身份验证缺失、数据泄露、恶意软件等。如何保障AI产品及服务的安全,成为当前和未来的重

    2024年02月13日
    浏览(52)
  • 机器学习-模型评估优化

    任务: 拟合反应速率(rate)与温度(temperature)数据,预测85度时的反应速率 欠拟合 过拟合 例2: 欠拟合 过拟合 欠拟合与过拟合 模型不合适,导致其无法对数据实现有效预测 模型对数据的预测情况 训练数据 预测数据 欠拟合 不准确 不准确 过拟合 准确 不准确 好模型 准确

    2024年01月22日
    浏览(39)
  • 机器学习入门教学——人工智能、机器学习、深度学习

    1、人工智能 人工智能相当于人类的代理人,我们现在所接触到的人工智能基本上都是弱AI,主要作用是正确解释从外部获得的数据,并对这些数据加以学习和利用,以便灵活的实现特定目标和任务。 例如: 阿尔法狗、智能汽车 简单来说: 人工智能使机器像人类一样进行感

    2024年02月09日
    浏览(84)
  • 人工智能|机器学习——基于机器学习的舌苔检测

    基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。在诊断中,中医通过观察人的舌头的舌质、苔质等舌象特征,了解人体内的体质信息从而对症下药。 传统中医的舌诊主要依赖

    2024年02月22日
    浏览(65)
  • 机器学习--人工智能概述

    入门人工智能,了解人工智能是什么。为啥发展起来,用途是什么,是最重要也是最关键的事情。大致有以下思路。 人工智能发展历程 机器学习定义以及应用场景 监督学习,无监督学习 监督学习中的分类、回归特点 知道机器学习的开发流程 人工智能在现实生活中的应用

    2024年01月19日
    浏览(57)
  • 人工智能与机器学习

    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 专栏:《机器学习》 ​ ​ ☞什么是人工智能、机器学习、深度学习 人工智能这个概念诞生于1956年的达特茅斯

    2024年02月02日
    浏览(59)
  • 【机器学习】人工智能概述

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.人工智能概述 1.1 机器学习、人工智能与深度学习 1.2 机器学习、深度学习能做些什么

    2024年02月09日
    浏览(53)
  • 人工智能与机器人|机器学习

    原文链接: https://mp.weixin.qq.com/s/PB_n8woxdsWPtrmL8BbehA 机器学习下包含神经网络、深度学习等,他们之间的关系表示如图2-7所示。 图2-7 关系图 那么什么是机器学习、深度学习、他们的区别又是什么呢? 2.7.1 什么是机器学习? 机器学习是 人工智能 (AI) 和计算机科学的一个分支,

    2024年02月06日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包