机器学习模板代码(期末考试复习)自用存档

机器学习复习代码

利用sklearn实现knn

在这里插入图片描述

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCVdef model_selection(x_train, y_train):## 第一个是网格搜索## p是选择查找方式:1是欧式距离   2是曼哈顿距离params = {'n_neighbors': [3,5,7], 'p': [1,2]}model = KNeighborsClassifier()gs = GridSearchCV(model, params, verbose=2, cv=5)gs.fit(x_train, y_train)print("Best Model:", gs.best_params_, "Accuracy:", gs.best_score_)print(gs.best_estimator_)return gs.best_estimator_def read():filename = r"data/shuixianhua.xlsx"data = pd.read_excel(filename, header=None)## iloc[行,列]x1 = data.iloc[1:, [0, 1]].valuesx2 = data.iloc[1:, [3, 4]].values# print(x2)y1 = data.iloc[1:, 2].valuesy2 = data.iloc[1:, 5].valuesx = np.vstack((x1, x2))  # 竖向合并print("x:")print(x)y = np.hstack((y1, y2))  # 横向合并print("y:")print(y)## 这里是因为我把excel的y理解成string类型了,如果正常读可以不加这个## 将y转为数值的inty = y.astype(int)return x, yif __name__ == '__main__':x, y = read()best_model = model_selection(x, y)

利用sklearn实现线性回归

数据集展示

在这里插入图片描述

import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as np
def MAE(y,y_pre):return np.mean(np.abs(y-y_pre))
def MSE(y,y_pred):return np.mean((y-y_pred)**2)
def RMSE(y,y_pred):return np.sqrt(MSE(y,y_pred))
def MAPE(y,y_pred):return np.mean(np.abs(y-y_pred)/y)
def R2(y,y_pred):u=np.sum((y-y_pred)**2)v=np.sum((y-np.mean(y_pred))**2)return 1-(u/v)
def judege(name,y,y_pre):mae=MAE(y,y_pre)mse=MSE(y,y_pre)rmse=RMSE(y,y_pre)mape=MAPE(y,y_pre)r2=R2(y,y_pre)print(f"{name}的MAE:{mae},MSE:{mse},RMSE:{rmse}.MAPE:{mape},R2:{r2}")def read():filename = r"../data/ComposePlot.xlsx"data=pd.read_excel(filename,header=None)x1 = data.iloc[2:, [0,]].valuesy1 = data.iloc[2:,1].valuesx2 = data.iloc[2:,[2,]].valuesy2 = data.iloc[2:,3].valuesx3 = data.iloc[2:,[4,]].valuesy3 = data.iloc[2:,5].valuesx4 = data.iloc[2:,[6,]].valuesy4 = data.iloc[2:,7].valuesreturn x1,y1,x2,y2,x3,y3,x4,y4def getModel(x,y):model = LinearRegression()model.fit(x,y)return modeldef main(x1, y1, x2, y2, x3, y3, x4, y4):model1 = getModel(x1,y1)model2 = getModel(x2, y2)model3 =getModel(x3,y3)model4 =getModel(x4,y4)judege("mode1",y1,model1.predict(x1))judege("mode2",y2,model2.predict(x2))judege("mode3",y3,model3.predict(x3))judege("mode4",y4,model4.predict(x4))if __name__ == '__main__':x1, y1, x2, y2, x3, y3, x4, y4 = read()main(x1, y1, x2, y2, x3, y3, x4, y4)

利用sklearn实现逻辑回归

数据集展示

在这里插入图片描述

import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegressiondef main(x,y):model=LogisticRegression()model.fit(x,y)print(model.predict(x))
def read():filename = "data/student.xlsx"data=pd.read_excel(filename,header=None)x=data.iloc[1:,[0,1]].valuesy=data.iloc[1:,2].valuesprint(x)print(y)return x,y
if __name__ =='__main__':x,y=read()main(x,y)

利用sklearn实现SVM(向量机)

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
import numpy as np
from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, \f1_scoredef load_data(): #导入的尾花data = load_iris()x, y = data.data, data.targetx_train, x_test, y_train, y_test = \train_test_split(x, y, test_size=0.3,shuffle=True, random_state=20)return x, y, x_train, x_test, y_train, y_test## 无脑写这个就行
def model_selection(x_train, y_train):model = SVC()paras = {'C': np.arange(1, 10, 5),# rbf:高斯核函数   linear:线性核函数  poly:多项式核函数'kernel': ['rbf', 'linear', 'poly'],'degree': np.arange(1, 10, 2),'gamma': ['scale', 'auto'],'coef0': np.arange(-10, 10, 5)}gs = GridSearchCV(model, paras, cv=3, verbose=2, n_jobs=3)gs.fit(x_train, y_train)print('best score:', gs.best_score_)print('best parameters:', gs.best_params_)return gs.best_params_def train(x_train, x_test, y_train, y_test, C, gamma, kernel):model = SVC(C=C, kernel=kernel, gamma=gamma)model.fit(x_train, y_train)y_pred = model.predict(x_test)# 生成混淆矩阵confusion = confusion_matrix(y_test, y_pred)print("混淆矩阵:\n", confusion)# 生成分类报告,包括准确率、精度、召回率和 F1 得分accuracy = accuracy_score(y_test, y_pred)precision = precision_score(y_test, y_pred, average='weighted')recall = recall_score(y_test, y_pred, average='weighted')f1 = f1_score(y_test, y_pred, average='weighted')print("准确率Accuracy:", accuracy)print("精度Precision:", precision)print("召回率Recall:", recall)print("FScore:", f1)if __name__ == '__main__':X, Y, x_train, x_test, y_train, y_test = load_data()best_params = model_selection(x_train, y_train)## 这步骤也是无脑写就行train(x_train, x_test, y_train, y_test, best_params["C"], best_params["gamma"], best_params["kernel"])

小知识点扩展

将数据分成训练集和测试集

   x_train, x_test, y_train, y_test = \train_test_split(x, y, test_size=0.3,shuffle=True, random_state=20)

来自chargpt的解释

是的,这段代码用于将数据集分成训练集和测试集。具体地说,它使用train_test_split函数将输入的特征数据x和标签数据y分成四个部分:x_train(训练集的特征数据)、x_test(测试集的特征数据)、y_train(训练集的标签数据)和y_test(测试集的标签数据)。

以下是这段代码的主要参数和作用:

  • x是特征数据。
  • y是标签数据。
  • test_size=0.3指定了测试集的比例,这里是总数据的30%将被用作测试集。
  • shuffle=True表示在分割数据之前对数据进行洗牌,以确保数据的随机性。
  • random_state=20是一个随机种子,用于确保每次运行代码时分割数据的结果都相同,这有助于复现实验结果。

综上所诉,只要背就好了,还有参数的意思

归一化

def hypo(x,w,b):z=np.matmul(x,w)+bh_x=1/(1+np.exp(-z))h_x=(h_x>=0.5)*1return h_x

书上p49,我也不太懂归一化的用法,其中z=wx+b

从0实现线性回归

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 添加归一化函数
def normalize_data(data):min_val = np.min(data)max_val = np.max(data)normalized_data = (data - min_val) / (max_val - min_val)return normalized_datadef prediction(X, W, bias):return np.matmul(X, W) + biasdef cost_function(X, y, W, bias):m, n = X.shapey_hat = prediction(X, W, bias)return 0.5 * (1 / m) * np.sum((y - y_hat) ** 2)def gradient_descent(X, y, W, bias, alpha):m, n = X.shapey_hat = prediction(X, W, bias)grad_w = -(1 / m) * np.matmul(X.T, (y - y_hat))grad_b = -(1 / m) * np.sum(y - y_hat)W = W - alpha * grad_wbias = bias - alpha * grad_breturn W, biasdef train(X, y, ite=200):m, n = X.shapeW, b, alpha, costs = np.random.randn(n, 1), 0.1, 0.2, []for i in range(ite):costs.append(cost_function(X, y, W, b))W, b = gradient_descent(X, y, W, b, alpha)return costsdef read():filename = r"../../data/easy_test.xlsx"data = pd.read_excel(filename, header=None)x = data.iloc[2:, [0, ]].valuesy = data.iloc[2:, 1].values# 对特征数据 x 进行归一化x_normalized = normalize_data(x)return x_normalized, yif __name__ == '__main__':x, y = read()costs = train(x, y)# print(costs)# 绘制损失曲线plt.figure()plt.plot(range(len(costs)), costs, marker='o', linestyle='-', color='b', label='Training Loss')plt.xlabel('Iteration')plt.ylabel('Cost')plt.title('Training Loss')plt.legend()plt.grid(True)plt.show()

从0实现逻辑回归

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

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

相关文章

YOLO目标检测——海洋目标检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:海洋监管、海洋资源开发、海洋科学研究数据集说明:海洋目标检测数据集,真实场景的高质量图片数据,数据场景丰富,含有“金属”、“未知”、“橡胶”、“平台”、“塑料”、“木材”、“布”、“纸张”、“…

《QT从基础到进阶·十六》QT实现客户端和服务端的简单交互

QT版本:5.15.2 VS版本:2019 客户端程序主要包含三块:连接服务器,发送消息,关闭客户端 服务端程序主要包含三块:打开消息监听,接收消息并反馈,关闭服务端 1、先打开服务端监听功能 …

GIS入门,xyz地图瓦片是什么,xyz数据格式详解,如何发布离线XYZ瓦片到nginx或者tomcat中

XYZ介绍 XYZ瓦片是一种在线地图数据格式,由goole公司开发。 与其他瓦片地图类似,XYZ瓦片将地图数据分解为一系列小的图像块,以提高地图显示效率和性能。 XYZ瓦片提供了一种开放的地图平台,使开发者可以轻松地将地图集成到自己的应用程序中。同时,它还提供了高分辨率图像和…

如何在时间循环里最优决策——时间旅行者的最优决策

文章目录 每日一句正能量前言时间旅行和平行宇宙强化学习策略梯度算法代码案例推荐阅读赠书活动 每日一句正能量 做一个决定,并不难,难的是付诸行动,并且坚持到底。 前言 时间循环是一类热门的影视题材,其设定常常如下&#xff1…

Spring Data JPA 项目配置与QueryDSL集成

一、说明 Spring Data JPA通过Spring Initializer创建时勾选相关依赖即可引入,QueryDSL需要单独引入。Spring JPA针对QueryDSL有比较好的兼容性,可以实现优雅的SQL构建。 二、设置JPA默认配置(yaml格式) spring:jpa:hibernate:…

2023.11.8 hadoop学习-概述,hdfs dfs的shell命令

目录 1.分布式和集群 2.Hadoop框架 3.版本更新 4.hadoop架构详解 5.页面访问端口 6.Hadoop-HDFS HDFS架构 HDFS副本 7.SHELL命令 8.启动hive服务 1.分布式和集群 分布式: 多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务)集 群:…

HTTP-HTTPS区别详解

一、HTTP协议 1. GET和POST的请求的区别 Post 和 Get 是 HTTP 请求的两种方法,其区别如下: 应用场景: GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会产生影响的场景,比如说请求一个网页的资源。而 Po…

[模版总结] - 树的基本算法1 - 遍历

树结构定义 一种非线性存储结构,具有存储“一对多”关系的数据元素集合 种类 General Tree TrieB/B 树二叉树 满/完满/完全二叉树 完美BT : 除了叶子结点外所有节点都有两个字节点,每一层都完满填充完全BT: 除最后一层以外其他每一层都完美…

VUE获取当前日期的周日和周六

<template><div><div click"handleLast()">上一周</div><div click"handleNext()">下一周</div><el-calendarref"monChild"v-model"value":first-day-of-week"7":range"[sta…

二十、W5100S/W5500+RP2040树莓派Pico<MQTT连接阿里云控制板载LED>

文章目录 1. 前言2. 简介2.1 初步了解阿里云物联网平台创建产品步骤2.2 阿里云物模型讲解 3 WIZnet以太网芯片4 示例概述4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1. 前言 物联网平台提供安全可靠的设备连接通信能力&#xf…

【uniapp】签名组件,兼容vue2vue3

网上找了个源码改吧改吧&#xff0c;清除了没用的功能和兼容性&#xff0c;基于uniapp开发的 样子 vue2 使用方法&#xff0c;具体的可以根据业务自行修改 <signature ref"signature" width"100%" height"410rpx"></signature>confi…

Python---列表的循环遍历,嵌套

循环遍历就是使用while或for循环对列表中的每个数据进行打印输出 while循环&#xff1a; list1 [貂蝉, 大乔, 小乔]# 定义计数器 i 0 # 编写循环条件 while i < len(list1):print(list1[i])# 更新计数器i 1 for循环&#xff08;推荐&#xff09;&#xff1a; list1 [貂…