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

机器学习复习代码

利用sklearn实现knn

在这里插入图片描述

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV

def 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]].values
    x2 = data.iloc[1:, [3, 4]].values
    # print(x2)
    y1 = data.iloc[1:, 2].values
    y2 = data.iloc[1:, 5].values
    x = np.vstack((x1, x2))  # 竖向合并
    print("x:")
    print(x)
    y = np.hstack((y1, y2))  # 横向合并
    print("y:")
    print(y)

## 这里是因为我把excel的y理解成string类型了,如果正常读可以不加这个
    ## 将y转为数值的int
    y = y.astype(int)
    
    return x, y


if __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,]].values
    y1 = data.iloc[2:,1].values

    x2 = data.iloc[2:,[2,]].values
    y2 = data.iloc[2:,3].values

    x3 = data.iloc[2:,[4,]].values
    y3 = data.iloc[2:,5].values

    x4 = data.iloc[2:,[6,]].values
    y4 = data.iloc[2:,7].values
    return x1,y1,x2,y2,x3,y3,x4,y4

def getModel(x,y):
    model = LinearRegression()
    model.fit(x,y)
    return model

def 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 LogisticRegression


def 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]].values
    y=data.iloc[1:,2].values
    print(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_score


def load_data(): #导入的尾花
    data = load_iris()
    x, y = data.data, data.target
    x_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)+b
    h_x=1/(1+np.exp(-z))
    h_x=(h_x>=0.5)*1
    return 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_data


def prediction(X, W, bias):
    return np.matmul(X, W) + bias


def cost_function(X, y, W, bias):
    m, n = X.shape
    y_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.shape
    y_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_w
    bias = bias - alpha * grad_b
    return W, bias


def train(X, y, ite=200):
    m, n = X.shape
    W, 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 costs


def read():
    filename = r"../../data/easy_test.xlsx"
    data = pd.read_excel(filename, header=None)
    x = data.iloc[2:, [0, ]].values
    y = data.iloc[2:, 1].values

    # 对特征数据 x 进行归一化
    x_normalized = normalize_data(x)

    return x_normalized, y


if __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实现逻辑回归

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 + Vite + Ts + Router搭建项目

1、新建文件夹 从新建的文件夹cmd进入终端 2、安装vite—依据vite创建vue3项目 2.1、运行 npm init vitelatest2.2.1、输入项目名称 2.2.2、选择vue 2.2.3、选择TypeScript语言 3、安装依赖项 3.1、进入刚才创建的文件夹 cd vite-project 3.2、查看镜像 #查看当前源 npm con…

【uniapp+vue3/vue2】ksp-cropper高性能图片裁剪工具,详解

效果图: 1、ksp-cropper是hbuilder插件市场中的一款插件,兼容vue2和vue3 ksp-cropper插件安装地址,直接点击跳转 2、插件用法相对简单 (1)只要url有值就会显示插件,为空就会隐藏插件 (2&#…

自动化测试框架 —— pytest框架入门篇

今天就给大家说一说pytest框架。 今天这篇文章呢,会从以下几个方面来介绍: 1、首先介绍一下pytest框架 2、带大家安装Pytest框架 3、使用pytest框架时需要注意的点 4、pytest的运行方式 5、pytest框架中常用的插件 01、pytest框架介绍 pytest 是 pytho…

国产猫罐头可以长期作为主食吗?我家的优质TOP的猫罐头分享

我最近一直在调查国产猫罐头可以长期作为主食吗?看看我的购物订单,我已经尝试了几十款了。今天,我想和大家分享一些关于国产猫罐头的经验和见解。 近年来,国产宠粮市场取得了突破性的进展,各个猫粮商在配方、营养数据…

win10添加回环网卡步骤

打开命令行输入hdwwiz 添加新硬件向导 结果

Visual Studio 2022 + OpenCV 4.5.2 安装与配置教程

目录 OpenCV的下载与配置Visual Studio 2022的配置新建工程新建文件新建项目属性表环境配置测试先写一个输出将OpenCV的动态链接库添加到项目的 x64 | Debug下测试配置效果 Other OpenCV的下载与配置 参考这个OpenCV的下载与环境变量的配置: Windows10CLionOpenCV4…

CUDA学习笔记7——CUDA内存组织

CUDA内存组织 CUDA设备内存的分类与特征 内存类型物理位置访问权限可见范围生命周期1全局内存芯片外可读写所有线程和主机端由主机分配与释放2常量内存芯片外只读所有线程和主机端由主机分配与释放3纹理和表面内存芯片外一般只读所有线程和主机端由主机分配与释放4寄存器内存…

OpenSSL生成自签名证书

生成之前首先需要明白以下内容: 第三点的验证数字签名解释下:客户端将使用颁发机构的公钥解密得到的原始数据,再将原始数据通过哈希算法计算得到的哈希值(此处应该是使用CA证书提供的哈希算法)进行比对。如果两者一致&…

2022最新版-李宏毅机器学习深度学习课程-P46 自监督学习Self-supervised Learning(BERT)

一、概述:自监督学习模型与芝麻街 参数量 ELMO:94MBERT:340MGPT-2:1542MMegatron:8BT5:11BTuring NLG:17BGPT-3:175BSwitch Transformer:1.6T 二、Self-supervised Lear…

云计算:无所不能的超级英雄

引言 在这个奇妙的时代,云计算如同一位无所不能的超级英雄,无处不在。从智能家居到无人驾驶,从虚拟现实到人工智能,云计算为我们的生活带来了智能、便捷和有趣。它以其强大的能力和灵活性,令我们的生活变得更加智能化…

库存预占架构升级方案设计-交易库存中心

背景介绍  伴随物流行业的迅猛发展,一体化供应链模式的落地,对系统吞吐、系统稳定发出巨大挑战,库存作为供应链的重中之重表现更为明显。近三年数据可以看出:  接入商家同比增长37.64%、货…

rviz添加qt插件

一、增加rviz plugin插件 资料:http://admin.guyuehome.com/42336 https://blog.51cto.com/u_13625033/6126970 这部分代码只是将上面两个链接中的代码整合在了一起,整合在一起后可以更好的理解其中的关系 1、创建软件包 catkin_create_pkg rviz_tel…

css呼吸效果实现

实现一个图片有规律的大小变化,呈现呼吸效果,怎么用CSS实现这个呼吸效果呢 一.实现 CSS实现动态效果可以使用动画( animation)来属性实现,放大缩小效果可以用transform: scale来实现,在这基础上有了动画,就可以设置一个…

每日汇评:黄金将测试1935美元的200日移动均线

金价在美联储主席鲍威尔发表讲话之前仍然脆弱; 在市场情绪喜忧参半的情况下,美元与美债收益率走势艰难; 在上升的三角形破裂和看跌的相对强弱指数中,黄金价格看向200日移动均线; 黄金周四早时在略低于1950美元的三周…

访问者模式

详情可参考:https://zhuanlan.zhihu.com/p/380161731 意图:主要将数据结构与数据操作分离。 适用于:系统中有稳定的数据结构,且数据结构的功能经常发生变化。 双分派:我的理解是两次多态操作,动态获取对象…

mysql的备份和恢复

备份:完全备份 增量备份 完全备份:将整个数据库完整的进行备份 增量备份:在完全备份的基础之上,对后续新增的内容进行备份 备份的需求 1、在生产环境中,数据的安全至关重要,任何数据的都可能产生非常严重…

PHP保存时自动删除末尾的空格,phpstorm自动删除空白字符串

最近有个活儿,修改一个财务软件。 修改后给客户验收的过程中,客户反应有一个txt表格导出功能不能用了。之前是好的。 这次是新增,老的这个功能碰都没碰过,怎么能有问题呢?我心里OS 下班后我立马用系统导出TXT&#…

如何实现Debian工控电脑USB接口安全管控

Debian 作为工控电脑操作系统具有稳定性、安全性、自定义性和丰富的软件包等优势,适用于要求高度可靠性和安全性的工控应用。 Debian 作为工控电脑操作系统在工业控制领域有很大优势,包括: 稳定性:Debian 的发布版以其稳定性而闻…

ThinkPHP框架 开源 虚拟资源分享付费下载PHP网站源码

源码测评:非常不错的资源分享网站,仿的是之前的码农网,这个网站也是在码农网的源码基础上修改而来,这个是用ThinkPHP仿的,还不错,测试的时候发现后台上传图片报错,其他暂时没有发现。 转载自…

Leetcode刷题【hot100】盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例…