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

news2024/10/6 10:35:19

机器学习复习代码

利用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实现逻辑回归

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

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

相关文章

JVM之jps虚拟机进程状态工具

jps虚拟机进程状态工具 1、jps jps:(JVM Process Status Tool),虚拟机进程状态工具,可以列出正在运行的虚拟机进程,并显示虚拟机执 行主类(Main Class,main()函数所在的类)的名称&#xff0c…

公司来了个00后,起薪就是18K,不愧是卷王。。。

前言 都在传00后躺平、整顿职场,但该说不说,是真的卷,感觉我都要被卷废了... 前段时间,公司招了一个年轻人,其中有一个是00后,工作才一年多,直接跳槽到我们公司,薪资据说有18K&…

Java自学第6课:电商项目(1)

从本课开始,我们跟着项目一起来敲代码。通过项目来学习Java和Java web 1 开始 首先了解要做什么项目,这里选择B2C电商。 需求分析很重要,所以要了解甲方业务流程。 之后配置开发环境,选择开发工具。 然后就是搭建开发环境&…

【16】c++11新特性 —>弱引用智能指针weak_ptr(1)

定义 std::weak_ptr&#xff1a;弱引用的智能指针&#xff0c;它不共享指针&#xff0c;不能操作资源&#xff0c;是用来监视 shared_ptr 中管理的资源是否存在。 use_count #include <iostream> #include <memory> using namespace std;int main() {shared_ptr…

最终前端后端小程序还有nginx配置

前端 前端 build 代码及其 放置位置 后端 nginx.conf 配置 user root;worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }http {include /etc/nginx/mime.types;default_type a…

SysML理论知识

概述 由来 长期以来系统工程师使用的建模语言、工具和技术种类很多&#xff0c;如行为图、IDEF0、N2图等&#xff0c;这些建模方法使用的符号和语义不同&#xff0c;彼此之间不能互操作和重用。系统工程正是由于缺乏一种强壮的标准的建模语言&#xff0c;从而限制系统工程师和…

电商API接口多平台全面分类|接入方式|提供测试

l 角色分类 对应角色主要包括&#xff1a; 依次表示公开查询应用、买家应用、卖家应用、商家应用、高级应用、专业应用被授权访问API的角色级别。其中公开查询应用为最低权限集合级别、专业 应用为最高权限集合级别。查、买、卖接口无需审批&#xff0c;仅受默认流量规则限制…

Windows上免费可用的 7 款外置硬盘数据恢复软件

这篇文章全面测试和比较了不同的外部硬盘恢复软件&#xff0c;并选出了其中最好的七个。您将看到有关 7 种数据恢复软件的详细报告&#xff0c;包括价格、支持的平台、目标用户、优缺点、易用性、恢复性能、扫描方法、扫描速度以及许多其他会影响用户体验的标准。第一个软件是最…

α-SRHLA

作者未提供代码

uniapp中picker 获取时间组件如何把年月日改成年月日默认时分秒为00:00:00

如图所示&#xff0c;uniapp中picker组件的日期格式为&#xff1a; 但后端要 2023-11-08 00:00:00格式 如何从2023-11-08转化为 2023-11-08 00:00:00&#xff1a;&#x1f447; const date new Date(e.detail.value);//"2023-11-17" date.setHours(0, 0, 0); // 2…

一文1700字使用Postman搞定各种接口token实战(建议收藏)

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…

微服务中配置文件(YAML文件)和项目依赖(POM文件)的区别与联系

实际上涉及到了微服务架构中的两个重要概念&#xff1a;服务间通信和项目依赖管理。在微服务架构中&#xff0c;一个项目可以通过两种方式与另一个项目建立依赖关系&#xff1a;通过配置文件&#xff08;如YAML文件&#xff09;和通过项目依赖&#xff08;如POM文件&#xff09…

学完这套jmeter结果数据写入到指定文件,涨薪3k没问题

背景&#xff1a; 在日常的功能测试或者性能测试的时候&#xff0c;需要把结果中指定的数据保存到指定的文件&#xff0c;进行使用&#xff0c;发现 jmeter 自带的文件写入&#xff0c;没有自己需要的&#xff0c;默认只支持 XML 的结果保存&#xff0c;那么接下来我们围绕 bea…

【吞噬星空】地球怪兽沦为濒危物种,罗峰出发虬龙星,新剧情开始

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《吞噬星空》国漫第92话最新剧情解析&#xff0c;在银河系的边际&#xff0c;一艘宇宙飞船悄然启程&#xff0c;目的地是远离家乡的虬龙星。罗峰&#xff0c;这位年轻的旅者&#xff0c;…

【算法-链表1】移除链表元素 和 设计链表

今天&#xff0c;带来链表相关算法的讲解。文中不足错漏之处望请斧正&#xff01; 理论基础点这里 移除链表元素 1. 思路 链表的删除和插入&#xff0c;都是改变链接关系。 如图&#xff1a;要删除值为2的结点&#xff0c;要找到其上一个节点&#xff0c;让上一个节点指向值…

利用QT画图像的直方图

1.什么是直方图 直方图是一种图形化展示数据频率分布的方式。它将样本数据分成一系列相邻的区间&#xff0c;统计每个区间内数据所占比例或数量&#xff0c;并用矩形条形图表现出来。直方图可以反映样本数据的分布情况&#xff0c;例如它们的集中趋势、对称性和离散程度等。 …

几种解决mfc140.dll文件缺失的方法,电脑提示mfc140.dll怎么办

电脑提示mfc140.dll缺失&#xff0c;如果你不去处理的话&#xff0c;那么你的程序游戏什么都是启动不了的&#xff0c;如果你想知道有什么方法可以解决那么可以参考这篇文章进行解决&#xff0c;今天给大家几种解决mfc140.dll文件缺失的方法。电脑提示mfc140.dll也不用担心解决…

shell的for循环

列表for循环 列表for循环的语法结构如下: for variablein list #每一次循环&#xff0c;依次把列表list 中的一个值赋给循环变量 do #循环体开始的标志commands #循环变量每取一次值&#xff0c;循环体就执行一遍commands done #循环结束的标志&#xff0c;返回循环顶…

腾讯待办关停,导出的数据怎么恢复到手机上面?

相信有不少腾讯待办的用户都发现了其“业务关停通知”&#xff0c;确实如此&#xff0c;由于业务调整&#xff0c;腾讯待办将于2023年的12月20日全面停止运营并下架&#xff0c;这就表示以后我们无法继续使用它了。在腾讯待办关停之前&#xff0c;绝大多数用户需要做的就是及时…

推荐一款功能强大的在线文件预览工具-kkFileView

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…