人工智能机器学习——模型评价及优化

一、欠拟合与过拟合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、数据分离与混淆矩阵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

混淆矩阵(Confusion Matrix)

在这里插入图片描述

在这里插入图片描述

混淆矩阵,又称为误差矩阵,用于衡量分类算法的准确程度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、模型优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、实战准备

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、酶活性预测,使用数据集T-R-train.csv,测试集T-R-test.csv

#加载数据
import pandas as pd
import numpy as np
data_train = pd.read_csv('T-R-train.csv')
data_train.head()

在这里插入图片描述

data_test = pd.read_csv('T-R-test.csv')
data_test.head()

在这里插入图片描述

#赋值x,y
x_train = data_train.loc[:,'T']
y_train = data_train.loc[:,'rate']x_test = data_test.loc[:,'T']
y_test = data_test.loc[:,'rate']
#可视化数据
from matplotlib import pyplot as plt 
fig1 = plt.figure()
plt.scatter(x_train,y_train)

在这里插入图片描述

#转换成一维数组
x_train = np.array(x_train).reshape(-1,1)
x_test = np.array(x_test).reshape(-1,1)
print(x_train.shape,x_test.shape)
#创建线性回归模型
from sklearn.linear_model import LinearRegression
lr1 = LinearRegression()
lr1.fit(x_train,y_train)

在这里插入图片描述

#预测数据
y_train_predict = lr1.predict(x_train)
y_test_predict = lr1.predict(x_test)#计算R二分数,越接近1,说明模型越好
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(r2_train,r2_test)

在这里插入图片描述

#可视化模型预测结果
x_range = np.linspace(40,90,300).reshape(-1,1)
y_range_predict = lr1.predict(x_range)
fig2 = plt.figure()
plt.plot(x_range,y_range_predict)
plt.scatter(x_train,y_train)
plt.title('prediction data')
plt.xlabel('temperature')
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)
print(x_2_train)

在这里插入图片描述

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)#计算R二分数,越接近1,说明模型越好
from sklearn.metrics import r2_score
r2_2_train = r2_score(y_train,y_2_train_predict)
r2_2_test = r2_score(y_test,y_2_test_predict)
print(r2_2_train,r2_2_test)

在这里插入图片描述

#可视化模型预测结果
x_2_range = np.linspace(40,90,300).reshape(-1,1)
x_2_range_p = poly2.transform(x_2_range)
y_2_range_predict = lr2.predict(x_2_range_p)
print(x_2_range,y_2_range_predict)

在这里插入图片描述

fig4 = plt.figure()
plt.plot(x_2_range,y_2_range_predict)
plt.scatter(x_train,y_train)
plt.scatter(x_test,y_test)
plt.title('prediction data')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在这里插入图片描述

poly5 = PolynomialFeatures(degree=5)
x_5_train = poly5.fit_transform(x_train)
x_5_test = poly5.transform(x_test)
print(x_5_train.shape,x_5_train)

在这里插入图片描述

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)#计算R二分数,越接近1,说明模型越好
from sklearn.metrics import r2_score
r2_5_train = r2_score(y_train,y_5_train_predict)
r2_5_test = r2_score(y_test,y_5_test_predict)
print(r2_5_train,r2_5_test)
#可视化模型预测结果
x_5_range = np.linspace(40,90,300).reshape(-1,1)
x_5_range_p = poly5.transform(x_5_range)
y_5_range_predict = lr5.predict(x_5_range_p)
# print(x_5_range,y_5_range_predict)fig4 = plt.figure()
plt.plot(x_5_range,y_5_range_predict)
plt.scatter(x_train,y_train)
plt.scatter(x_test,y_test)
plt.title('prediction data')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在这里插入图片描述

六、芯片质量好坏分类任务,使用数据集data_class_raw.csv

#加载数据
import pandas as pd
import numpy as np
data = pd.read_csv('data_class_raw.csv')
data.head()

在这里插入图片描述

#赋值x,y
x = data.drop(['y'],axis=1)
x1 = data.loc[:,'x1']
x2 = data.loc[:,'x2']
y = data.loc[:,'y']
#可视化数据
from matplotlib import pyplot as plt
fig1 = plt.figure()
bad = plt.scatter(x1[y==0],x2[y==0])
good = plt.scatter(x1[y==1],x2[y==1])
plt.title('raw data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend([bad,good],['bad','good'])
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])
print(y_predict_bad)

在这里插入图片描述

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

在这里插入图片描述

#处理剔除异常点后的数据,使用数据集data_class_processed.csv,进行主成分分析(PCA)import pandas as pd
import numpy as np
data = pd.read_csv('data_class_processed.csv')#赋值x,y
x = data.drop(['y'],axis=1)
x1 = data.loc[:,'x1']
x2 = data.loc[:,'x2']
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)

在这里插入图片描述
在这里插入图片描述

#可视化标准差比例
fig3 = plt.figure()
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模型,完成分类
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)#计算准确率
from sklearn.metrics import accuracy_score
accuracy_trian = accuracy_score(y_train,y_train_predict)
accuracy_test = accuracy_score(y_test,y_test_predict)
print(accuracy_trian,accuracy_test)

在这里插入图片描述

#可视化分类边界
xx,yy = np.meshgrid(np.arange(0,10,0.05),np.arange(0,10,0.05))
print(xx,yy)

在这里插入图片描述

x_range=np.c_[xx.ravel(),yy.ravel()]
print(x_range.shape,x_range)

在这里插入图片描述

y_range_predict= knn_10.predict(x_range)
fig4 = plt.figure()
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(x1[y==0],x2[y==0])
good = plt.scatter(x1[y==1],x2[y==1])
plt.title('predict result')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend([bad,good,knn_bad,knn_good],['bad','good','knn_bad','knn_good'])
plt.show()

在这里插入图片描述

#计算混淆矩阵,计算准确率
from sklearn.metrics import confusion_matrix 
cn = confusion_matrix(y_test,y_test_predict)
print(cn)

在这里插入图片描述

TP = cn[1,1]
TN = cn[0,0]
FP = cn[0,1]
FN = cn[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
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(n)
print(accuracy_train)
print(accuracy_test)

在这里插入图片描述

fig5 = plt.figure()
plt.subplot(121)
plt.plot(n,accuracy_train,marker='o')
plt.title('train accuracy vs n_neighbors')
plt.xlabel('n_neighbors')
plt.ylabel('train accuracy')plt.subplot(122)
plt.plot(n,accuracy_test,marker='o')
plt.title('test accuracy vs n_neighbors')
plt.xlabel('n_neighbors')
plt.ylabel('test accuracy')
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/96221.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统启动时脚本命令执行

Linux内核启动过程中,会挂载文件系统,在文件系统挂载后,运行的第一个程序就是根目录下的linuxrc,而这是一个指向/bin/busybox 的链接,也就是说,系统起来后运行的第一个程序就是busybox本身。再然后&#xf…

连接池项目考点

好的!让我详细讲解一下您项目中的连接池是如何工作的。我会基于您现有的代码来分析整个工作流程。 Read file: net/ngx_c_socket_conn.cxx Read file: net/ngx_c_socket_conn.cxx Read file: net/ngx_c_socket_conn.cxx Read file: net/ngx_c_socket_conn.cxx Read …

【MySQL】从零开始了解数据库开发 --- 数据类型

我不假思索地上路, 因为出发的感觉太好了, 世界突然充满了可能性。 --- 杰克凯鲁亚克 --- 从零开始了解数据库开发MySQL中的数据类型数字类型字符串类型日期类型MySQL中的数据类型 MySQL数据库汇中,每一条数据都有其类型,主要分为…

mybatis vs mybatis-plus

​​核心关系:​​ MyBatis-Plus ​​不是​​ MyBatis 的替代品,而是构建在 MyBatis ​​之上​​的一个强大的​​增强工具包​​。它完全兼容原生 MyBatis,并在其基础上提供了大量开箱即用的功能,极大地简化了开发,…

2025胶水分装机服务商技术解析:聚焦高精度、智能化应用

胶水作为电子组装、新能源电池、医疗器械、消费类电子产品等关键环节中的核心材料,其生产、储存与分装过程对精度、洁净度和一致性的要求日益严苛。在这一背景下,胶水分装机及分装服务商正从传统的设备供应商向“工艺装备数据服务”的综合解决方案提供者…

v-model是怎么实现的,语法糖到底是什么

1&#xff1a;作用在表单元素上实际上就是2&#xff1a;作用在自定义组件上&#xff0c;vue2和vue3不同 vue2&#xff1a; v-model相当于名为value 的 prop和名为 input 的事件 在父组件中 <child v-model"message"></child> //相当于&#xff1a; <…

学习笔记:Javascript(5)——事件监听(用户交互)

事件监听&#xff1a;用户交互的核心机制在前端开发中&#xff0c;事件监听是处理用户交互的基础机制。它允许我们检测用户的操作&#xff08;如点击、输入、滚动等&#xff09;并执行相应的代码&#xff0c;让网页从静态变为动态。一、事件与事件监听的基本概念事件&#xff0…

在Linux系统中清理大文件的方法

在Linux系统的日常运维管理过程中&#xff0c;磁盘空间问题是一个非常常见且棘手的难题。随着系统运行时间的增加&#xff0c;日志文件、临时文件、缓存文件以及用户产生的数据会不断增长。如果缺乏及时的监控和清理&#xff0c;大文件往往会迅速占满磁盘&#xff0c;导致系统性…

使用x64dbg分析调试windows可执行程序

引言 当我们仅有一个C/C等编译的可执行程序&#xff08;windows 上的 exe 文件&#xff09;&#xff0c;而没有源码时我们应该怎么分析调试该可执行程序呢&#xff1f;我们可以通过动态分析或静态分析的方式达成我们的目的&#xff0c;当然比较有效的方案当然是静态分析结合动态…

在Windows 11上配置Cursor IDE进行Java开发

前言 Cursor IDE是一款基于VSCode的AI编程助手&#xff0c;集成了强大的AI功能&#xff0c;能够显著提升Java开发效率。本文详细介绍如何在Windows 11系统上安装和配置Cursor IDE&#xff0c;使其成为高效的Java开发环境。 1. Windows 11上安装Cursor IDE 1.1 下载和安装步骤…

字符串-43.字符串相乘-力扣(LeetCode)

一、题目解析 1、计算乘积后&#xff0c;将结果也按字符串返回 2、字符串长度在[1&#xff0c;200] 二、算法原理 为了方便字符串计算&#xff0c;我们将其逆置&#xff0c;符合我们的计算需求&#xff0c;"123"将变为"321" 解法1&#xff1a;模拟小学…

鸿蒙HAP包解包、打包、签名及加固全流程解析

在鸿蒙应用开发过程中&#xff0c;HAP&#xff08;HarmonyOS Ability Package&#xff09;包的解包、打包、签名以及加固是开发者们绕不开的重要环节。今天&#xff0c;就让我们深入探讨这一全流程&#xff0c;帮助大家更好地理解和掌握相关操作。 一、HAP解包 解包是分析和修…

PyTorch之张量创建与运算

PyTorch 主要有以下几个基础概念&#xff1a;张量&#xff08;Tensor&#xff09;、自动求导&#xff08;Autograd&#xff09;、神经网络模块&#xff08;nn.Module&#xff09;、优化器&#xff08;optim&#xff09;等。张量&#xff08;Tensor&#xff09;&#xff1a;PyTo…

数据 储存

文件储存 网页版爬虫数据库 &#xff1a; https://spidertools.cn/#/crypto TEXT 文本储存 可以使用记事本打开 r #读取。 r #读写&#xff0c;文件指针放在文件的开头。 w #写入&#xff0c;覆盖原文件。 w #读写&#xff0c;覆盖原文件。 a #附加。 a #读写&…

Flask 博客系统(Flask Blog System)

目标&#xff1a;零基础也能从头搭建一个支持文章管理、评论、分类标签、搜索、用户登录的博客系统 技术栈&#xff1a;Flask SQLite SQLAlchemy Jinja2 HTML/CSS Flask-Login 开发工具&#xff1a;VSCode 学习重点&#xff1a;MVC 模式、数据库操作、会话管理、表单处理一…

基于RFID技术的宠物自动喂食器方案

一、背景 宠物已经成为现代人生活中不可或缺的一部分&#xff0c;随着养宠物的人越来越多&#xff0c;宠物的数量也越来越多&#xff0c;有些家庭甚至养了两只以上的猫狗或者猫狗混养&#xff0c;宠物间的管理问题也越来越突出&#xff0c;如宠物之间的抢食行为&#xff0c;易…

conda常见问题

文章目录run "conda init" before "conda activate"打开PowerShell自动进入base环境&#xff08;cmd没有这个问题&#xff09;run “conda init” before “conda activate” 在使用conda命令创建env后使用conda activate命令&#xff0c;出现"run ‘…

第5章 HTTPS与安全配置

5.1 HTTPS概述 5.1.1 为什么需要HTTPS 数据加密:保护传输中的敏感数据 身份验证:确认服务器身份的真实性 数据完整性:防止数据在传输过程中被篡改 SEO优势:搜索引擎优先排名HTTPS网站 浏览器要求:现代浏览器对HTTP网站显示不安全警告 合规要求:许多行业标准要求使用HTTP…

Java入门级教程17——利用Java SPI机制制作验证码、利用Java RMI机制实现分布式登录验证系统

目录 1.制作验证码——java SPI机制 1.1 类所属包情况 1.2 具体实现 1.2.1 核心接口&#xff1a;ICode 1.2.2 接口实现类&#xff1a;验证码的具体生成逻辑 1.2.3 服务工厂类&#xff1a;CodeServiceFactory&#xff08;核心&#xff1a;SPI 服务发现&#xff09; 1.2.…

ES6笔记5

1. Promise相当于一个容器&#xff0c;保存着未来才要结束的事件&#xff08;异步操作&#xff09;的一个结果&#xff0c;各种异步操作都可以用同样方法处理 axios特点&#xff1a;对象的状态不受外界影响&#xff0c;处理异步操作&#xff0c;3个状态&#xff0c;Pending&…