机器学习knnlearn4

KNN机器学习实战(sklearn)(包含训练数据) 本文直接给出sklearn里面KNN 算法的用法。具体实现过程如下: import numpy as np from sklearn import datasets import operator from sklearn import neighbors import sklearn.model_selection as ms digits = datasets.load_digits() ... 阅读详情
import numpy as np
import operator


def  classify0(test_data: np.ndarray, training_data: np.ndarray, labels: list, k: int) -> str:
    """
    kNN 算法分类器
    :param test_data: 用于分类的数据(测试集)
    :param training_data: 用于训练的数据(训练集)
    :param labels: 分类标签
    :param k: kNN 算法参数, 选择距离最小的 k 个点
    :return: 分类结果
    """
    distances = np.sqrt(np.sum((np.tile(test_data, (training_data.shape[0], 1)) - training_data) ** 2, axis=1))
    sorted_indices = distances.argsort()
    class_count = {}
    for i in range(k):
        label = labels[sorted_indices[i]]
        class_count[label] = class_count.get(label, 0) + 1
    sorted_class_count = sorted(class_count.items(), key=operator.itemgetter(1), reverse=True)
    return sorted_class_count[0][0]


def file2matrix(filename: str) -> (np.ndarray, list):
    """
    打开并解析文件,对数据进行分类:1 代表不喜欢, 2 代表魅力一般, 3 代表极具魅力
    :param filename: 文件名
    :return: 特征矩阵和分类 Label 向量
    """
    try:
        with open(filename, 'r') as file:
            lines = file.readlines()
            num_lines = len(lines)
            feature_matrix = np.zeros((num_lines, 3))
            label_vector = []
            for i, line in enumerate(lines):
                line = line.strip()
                data = line.split('\t')
                feature_matrix[i, :] = data[0:3]
                if data[-1] == 'didntLike':
                    label_vector.append(1)
                elif data[-1] == 'smallDoses':
                    label_vector.append(2)
                elif data[-1] == 'largeDoses':
                    label_vector.append(3)
            return feature_matrix, label_vector
    except FileNotFoundError:
        print(f"错误:未找到文件 {filename}")
        return np.array([]), []


def autoNorm(data_set: np.ndarray) -> (np.ndarray, np.ndarray, np.ndarray):
    """
    对数据进行归一化
    :param data_set: 特征矩阵
    :return: 归一化后的特征矩阵、数据范围、数据最小值
    """
    min_vals = data_set.min(0)
    max_vals = data_set.max(0)
    ranges = max_vals - min_vals
    norm_data_set = (data_set - min_vals) / ranges
    return norm_data_set, ranges, min_vals


def classifyPerson():
    """
    通过输入一个人的三维特征,进行分类输出
    """
    result_list = ['讨厌', '有些喜欢', '非常喜欢']
    try:
        percent_tats = float(input("玩视频游戏所耗时间百分比:"))
        ff_miles = float(input("每年获得的飞行常客里程数:"))
        ice_cream = float(input("每周消费的冰激淋公升数:"))
        filename = "datingTestSet.txt"
        dating_data_matrix, dating_labels = file2matrix(filename)
        if dating_data_matrix.size == 0:
            return
        norm_matrix, ranges, min_vals = autoNorm(dating_data_matrix)
        test_array = np.array([percent_tats, ff_miles, ice_cream])
        norm_test_array = (test_array - min_vals) / ranges
        classifier_result = classify0(norm_test_array, norm_matrix, dating_labels, 3)
        print(f"你可能{result_list[classifier_result - 1]}这个人")
    except ValueError:
        print("错误:输入必须为有效的数字")


if __name__ == '__main__':
    classifyPerson()
    
你可能有些喜欢这个人
import numpy as np
data = np.mat([[1,200,105,3,False],
               [2,165,80,2,False],
               [3,184.5,120,2,False],
               [4,116,70,8,False],
               [5,270,150,4,True]])

row = 0
for line in data:
    row += 1
print(row)

print(data.size)
5
25
import numpy as np
data = np.mat([[1,200,105,3,False],
               [2,165,80,2,False],
               [3,184.5,120,2,False],
               [4,116,70,8,False],
               [5,270,150,4,True]])
print(print(data[0,3]))
print(print(data[0,4]))
3.0
None
0.0
None
import numpy as np
data = np.mat([[1,200,105,3,False],
               [2,165,80,2,False],
               [3,184.5,120,2,False],
               [4,116,70,8,False],
               [5,270,150,4,True]])

coll = []

for row in data:
    coll.append(row[0,1])


print(np.sum(coll))
print(np.mean(coll))
print(np.std(coll))
print(np.var(coll))
935.5
187.1
50.17808286493218
2517.84
import numpy as np
import pylab
import scipy.stats as stats

data = np.mat([[1,200,105,3,False],
               [2,165,80,2,False],
               [3,184.5,120,2,False],
               [4,116,70,8,False],
               [5,270,150,4,True]])


coll = []
for row in data:
    coll.append(row[0,1])

stats.probplot(coll,plot=pylab)
pylab.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


import pandas as pd
import matplotlib.pyplot as plot

rocksVmines = pd.DataFrame([[1,200,105,3,False],
                            [2,165,80,2,False],
                            [3,184.5,120,2,False],
                            [4,116,70,8,False],
                            [5,270,150,4,True]])
datarow1 = rocksVmines.iloc[1,0:3]
datarow2 = rocksVmines.iloc[2,0:3]

plot.scatter(datarow1,datarow2)
plot.xlabel("Attribute1")
plot.ylabel("Attribute2")

plot.show()


datarow3 = rocksVmines.iloc[3,0:3]
plot.scatter(datarow2,datarow3)
plot.xlabel("Attribute2")
plot.ylabel("Attribute3")
plot.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

plot.scatter(datarow2,datarow3)
plot.xlabel(“Attribute2”)
plot.ylabel(“Attribute3”)
plot.show()



    
[外链图片转存中...(img-BJOeAcI2-1743117156398)]
    



    
[外链图片转存中...(img-pvuHG2dQ-1743117156398)]
    

损失函数与优化器:从「梯度是怎么被造出来的」到「梯度是怎么被用掉的」 本文揭示损失函数与优化器本质一体:优化器仅依赖损失产生的梯度,而损失决定梯度的方向、尺度与噪声特性。错误的损失选择(如分类用MSE)会导致梯度失衡,使优化器失效;不同损失(如Huber、Focal)通过调控梯度分布影响优化过程。实测表明,归约方式、标签结构与损失配对直接决定梯度行为,进而影响收敛性与泛化。核心观点:选对损失,才是让优化器“看得懂”的前提。 阅读详情

相关推荐

C语言手写HTTPD网站服务器

零基础手写C语言http网站服务器,快速入门C/C++后端开发、服务器开发。

程序员Rock的博客 1万+

机器学习knnlearn1

KNN

xiaoadoudou的博客 1528

InfiniBand(IB)实战指南:从硬件配置到性能优化

本文是一份详尽的InfiniBand实战指南,涵盖从硬件选型、部署到驱动配置、性能优化的全流程。重点解析了InfiniBand作为AI训练与高性能计算(HPC)核心网络的优势,特别是其支持的RDMA技术如何实现微秒级低延迟。文章提供了硬件匹配、NCCL压测、内核参数调优及在PyTorch分布式训练中启用IB的实操步骤,旨在帮助工程师构建和优化高性能计算集群。

mqtt6iot的博客 581

机器学习knnlearn2

knn2 内容素材来源于网上,记录了本人如何学习的过程

xiaoadoudou的博客 1053

pi/4QPSK调制解调原理

文章目录1. π/4\pi/4π/4QPSK 信号的调制原理2. 匹配滤波器与成形滤波器 1. π/4\pi/4π/4QPSK 信号的调制原理 减小相位突变量的QPSK由偏置键控QPSK(OK-QPSK)和 π/4\pi/4π/4偏置的QPSK( π/4\pi/4π/4QPSK)。由于 π/4\pi/4π/4QPSK是用差分相位编码产生的(因此也叫做 π/4\pi/4π/4DQPSK),能有效地进行差分解调和鉴频器解调,在一些不易提取相干载波的场合很有用。 在常规的QPSK中,输入数据经过串/并变换后,分成

gemengxia的博客 2万+

CST--时域仿真的网格设置技巧

对于物理概念清晰的工程师而言,使用时域算法几乎能够解决所有电磁仿真问题,但是,掌握时域算法的仿真技巧比掌握频域的难度大,这恐怕也是很多仿真工程师更喜欢使用频域算法的原因,因此,对于时域算法的灵活应用更能考验你是否是一名合格的仿真工程师。

一只豌豆象的博客 6862

机器学习knnlearn5

素材来源于网上,记录自己学习过程

xiaoadoudou的博客 734

Unity集成阿里Qwen2.5-Omni全模态大模型实战:语音交互与多模态AI开发指南

本文详细介绍了在Unity中集成阿里Qwen2.5-Omni全模态大模型的实战指南。通过C#脚本开发,实现语音交互、图像分析等多模态AI功能,涵盖API调用、音频处理、流式响应解析等核心步骤,为游戏、虚拟人等Unity应用提供沉浸式智能交互解决方案。

weixin_29005499的博客 315

机器学习knnlearn3

素材来源于网上,记录学习过程

xiaoadoudou的博客 429

【自适应滤波】自适应UKF,基于新息自适应调节Q和R,场景为雷达跟踪与滤波、MATLAB实现

本文提出了一种基于新息协方差匹配的自适应UKF(CM-AUKF)算法,用于解决噪声统计未知或时变场景下的目标跟踪问题。通过实时调整过程噪声协方差Q和观测噪声协方差R,CM-AUKF显著提升了跟踪精度和稳定性。仿真结果表明,相比传统UKF,CM-AUKF在位置和速度估计误差上分别降低了约50%和30%,且无需人工调参。该算法适用于无人机导航、雷达跟踪等动态环境,MATLAB代码可直接运行复现结果。自适应曲线显示算法能有效收敛到真实噪声参数,验证了其自适应能力。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 330

【TIDB】TiDB认证考试PTCA 练习题 题库

TiDB认证考试PTCA 练习题 题库

DBA之路的博客 4721

【机器学习300问】139、Post-LN 和 Pre-LN 的区别?

Post-LN与Pre-LN的核心区别在于LayerNorm的位置:Post-LN在残差连接后,导致梯度需经LayerNorm变换,深层易出现梯度衰减或震荡;Pre-LN先做归一化,使输入稳定,残差路径梯度可无损回传,显著提升深层训练稳定性。尽管Pre-LN支持更深层次模型(如LLaMA、Qwen),但存在“深度诅咒”——深层贡献不足。相比之下,Post-LN浅层表现尚可,深层数易发散。因此,现代大模型普遍采用Pre-LN以保障训练可靠性。

qq_39780701的博客 398

MATLAB从入门到精通-APP调用simulink中的参数,并且修改,将结果返回到APP中

本次案例为以下微分方程: 其中方程的初始值为: Step1:搭建simulink文件,如下图所示: 初始值配置在积分模块中,如下图所示: Step2:制作app 操作视频: ,时长01:11 代码: 本文包括APP如何回调simulik中d的参数,以及把simulink中的仿真结果输出到APP中的绘图界面中。 核心代码如下: ...

wenyusuran的专栏 3042

机器学习基础|监督学习、标签、回归

网约车预估等待时长依赖监督学习中的回归任务。平台利用历史订单数据,以司机实际到达耗时为标签,通过上车点、时间、运力、路况等特征训练模型。模型不断优化预测值与真实耗时的误差,最终对新订单输出连续的预估等待时间,实现精准预测。

weixin_43971465的博客 244

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hugging Face:成为机器学习界的“Github”

以下文章来源于OneFlow,作者OneFlow社区五年前,AI领域的知名研究者Andrej Karpathy发文称,传统人工编程属于“软件1.0”,“软件2

2601_96798011的博客 130

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【机器学习300问】138、LayerNorm和BatchNorm的区别?

本文阐述了归一化与标准化在深度学习中的核心作用。输入层标准化可统一初始输入,但深层网络仍面临激活分布漂移。为此,提出BatchNorm与LayerNorm两种主流方法。

qq_39780701的博客 183

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

机器学习——混淆矩阵(待更新)

二元: true表示真实==预测,positive表示预测值=1.

m0_61175448的博客 150

为什么生成对抗网络训练常不稳定,模式崩溃与判别器过强之间是什么关系?

当支持集不重叠时(即 $D$ 能完美区分真假),JS 散度为常数 $\log 2$,其梯度为 0。这意味着一旦 $D$ 训练得稍好,$G$ 就失去了学习方向,导致训练停滞。生成对抗网络(GAN)的训练本质上是生成器($G$)与判别器($D$)之间的非合作零和博弈。以下代码展示了如何通过梯度惩罚(Gradient Penalty)来约束判别器,避免其过强导致生成器梯度失效。判别器过强是导致模式崩溃的直接诱因之一,二者之间存在明确的**“梯度误导”**因果关系。

2402_84593233的博客 205

AI 是怎样从数据中学习的?训练、验证、测试与推理

泛化能力(Generalization)指模型面对训练过程中没有见过的新数据时,仍然能够做出合理预测的能力。这是判断模型是否具有实际应用价值的重要标准。例如:一个用户流失预测模型,在历史数据上表现很好,但面对新上线的用户群体时,预测准确率明显下降。这可能说明模型学到的规律无法适应新的用户群体。泛化能力不仅取决于模型本身,也与训练数据是否具有代表性有关。训练数据只包含老用户,没有新用户。训练数据主要来自某个地区,实际业务却覆盖不同地区。过去的用户行为与当前用户行为已经发生变化。

dshizixu的博客 315

Spark06_MLlib机器学习

本文是《PySpark 从入门到实战》系列收官篇,带你用 Spark MLlib 走通机器学习全流程:从三要素与 7 步标准流程讲起,剖析 KNN、朴素贝叶斯、决策树三大算法原理,再以 KNN 手写、垃圾短信分类、决策树分类、逻辑回归鸢尾花(准确率 96.67%)、K-Means 聚类(轮廓系数 0.7345)五个案例落地,最后详解 TF-IDF 文本特征与余弦相似度。全文代码可直接运行,适合有 RDD 与 Spark SQL 基础的开发者快速上手。

2301_80420058的博客 453

机器学习01,KNN使用与简单数学原理

个人笔记

qq_59247073的博客 266

机器学习教程,从入门到精通,高斯混合模型(GMM)——写给机器学习小白的保姆级教程(10)

高斯混合模型(Gaussian Mixture Model,简称 GMM):假设你手里的数据是由"好几堆正态分布的数据混在一起"形成的,GMM 的任务就是——把这几堆分开,并且描述清楚每一堆的样子。

qq_45746668的博客 123

AI小白入门|无监督学习到底是什么?

很多新手看完无监督学习的定义只会死记硬背。本文避开复杂公式,从真实业务场景切入,对比监督学习,讲清楚无监督学习的核心价值、适用场景、底层逻辑和容易踩坑的认知误区,帮你理解它在机器学习链路里的定位。

weixin_43971465的博客 182

机器学习03,端到端02

个人笔记

qq_59247073的博客 171

机器学习01,了解与KNN

个人笔记

qq_59247073的博客 361

基于有效Token规模化的大模型预训练数据配方与工程体系研究——基于唐杰《高级机器学习》课程演讲

在此背景下,本文系统梳理GLM系列模型数据迭代轨迹,纠正数据墙认知偏差,分析天然数据与合成数据的互补机制,并完整构建支撑高质量Token挖掘的全链路数据工程体系,为大模型数据规模化建设提供理论与工程参考。早期小模型训练场景下,数据总量远大于算力可消化量,核心策略为择优筛选少量高质量数据。基于唐杰公开演讲核心观点、GLM数据迭代、数据墙、合成数据、清洗解析工具链、分层架构图、自研工程壁垒),完整重构成一篇结构严谨、逻辑连贯、标准期刊论文风格全文,预留精准图片插入位置,可直接定稿、查重、发表、结课提交。

interpromotion的博客 270
上一篇: 机器学习knnlearn3
下一篇: 机器学习knnlearn5
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值