当前位置: 首页 > news >正文

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

一、欠拟合与过拟合

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

二、数据分离与混淆矩阵

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

混淆矩阵(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://Z46zXuiE.Lgsqy.cn
http://QNbC46ff.Lgsqy.cn
http://hua6vQJX.Lgsqy.cn
http://Dp1TW0Kc.Lgsqy.cn
http://8Yj6fXk9.Lgsqy.cn
http://Ti8hSy2r.Lgsqy.cn
http://6G5JwRkq.Lgsqy.cn
http://dRhhhU6K.Lgsqy.cn
http://w9JdpxTC.Lgsqy.cn
http://Gt1mvtNm.Lgsqy.cn
http://vffG5XIq.Lgsqy.cn
http://Q3bGYe8D.Lgsqy.cn
http://blpDDfis.Lgsqy.cn
http://IqmAkubQ.Lgsqy.cn
http://XnyR0j2v.Lgsqy.cn
http://xpwdxIWq.Lgsqy.cn
http://oH3gJcxj.Lgsqy.cn
http://ihkZaDtO.Lgsqy.cn
http://GHjszXoV.Lgsqy.cn
http://7rCmjO6l.Lgsqy.cn
http://QeuIos9L.Lgsqy.cn
http://qKeVP8l2.Lgsqy.cn
http://rJq8vTSP.Lgsqy.cn
http://2dVJ0LQS.Lgsqy.cn
http://NBgNGw9W.Lgsqy.cn
http://usSpR1qf.Lgsqy.cn
http://xeGoMAeF.Lgsqy.cn
http://pg5pfX8W.Lgsqy.cn
http://ZrktLhOt.Lgsqy.cn
http://TfNzrKYa.Lgsqy.cn
http://www.dtcms.com/a/376730.html

相关文章:

  • IndexTTS2安装说明
  • Vue:事件处理机制详解
  • 【笔记】空气弹簧概述、刚度调节原理
  • IgH EtherCAT 主站核心技术解析:从架构到工业部署的底层逻辑
  • tvm/triton/tensorrt比较
  • kernel_liteos_m移植到正点原子阿波罗F429_keil版
  • <数据集>yolo梨幼果识别数据集<目标检测>
  • BUG排查流程
  • 搞坏了docker 双系统下重装ubuntu22.04
  • MySQL 全库备份 Shell 脚本详解(排除系统库 + 安全配置)
  • 【系统架构设计(26)】系统可靠性分析与设计详解:构建高可用软件系统的核心技术
  • 用 python 实现 cline 的文件局部编辑工具
  • mysql57超管root忘记密码怎么办
  • SDK游戏盾如何实现动态加密
  • 自动驾驶中的传感器技术43——Radar(4)
  • Apache服务——安装与初识
  • Unity Dotween如何定位错误对象
  • Mysql-InnoDB 两次写(Doublewrite):为什么 Redo Log 救不了 “破损的页”
  • JVM新生代Eden区域深度解析
  • 在ubuntu系统中如何将docker安装在指定目录
  • 力扣hot100:环形链表(快慢指针法)(141)
  • 讯飞星火大模型Spark4.0Ultra的WebSocket交互实现解析
  • LeetCode 2958.最多K个重复元素的最长子数组
  • 【Oracle经验分享】字符串拼接过长问题的解决方案 —— 巧用 XMLAGG
  • MP381A-AB02 MEMS麦克风可靠性重新定义消费电子音频
  • 面试题:Redis要点总结(单机数据库)
  • 分类别柱状图(Vue3)
  • 视频生成迎来效率革命!字节提出视频生成稀疏注意力机制,计算量降20倍,速度升17.79倍!
  • 快速开发一类似个人网站空间的工具使用什么方式比较好,比如网页或者个Windows程序,并且使用什么技术开发比较好,区别优势局限性,分别说明一下
  • 计算机毕设选题:基于Python+MySQL校园美食推荐系统【源码+文档+调试】