scikit-learn点滴

【Scikit-learn学习】第一课:Scikit-learn 简介和安装 欢迎来到 Scikit-learn 的入门课程!在这一课中,我们将介绍 Scikit-learn 的基础知识,包括它的历史、主要功能、以及如何在你的环境中安装它。这将为我们深入探索 Scikit-learn 的强大功能打下坚实的基础。Scikit-learn 是一个开源的 Python 机器学习库,它提供了大量的简单和高效的工具,适用于数据挖掘和数据分析。它建立在 Python 的 NumPy、SciPy 和 Matplotlib 库之上,使其成为科学和工程领域中数据分析和机器学习的首选库之一。 阅读详情

转自https://blog.youkuaiyun.com/lishuhuakai/article/details/53980517

scikit-learn点滴

scikit-learn是非常漂亮的一个机器学习库,在某些时候,使用这些库能够大量的节省你的时间,至少,我们用python,应该是很难写出速度快如斯的代码的.

scikit-learn官方出了一些文档,但是个人觉得,它的文档很多东西都没有讲清楚,它说算法原理的时候,只是描述一下,除非你对这种算法已经烂熟于心,才会对它的描述会心一笑,它描述API的时候,很多时候只是讲了一些常见用法,一些比较高级的用法就语焉不详,虽然有很多人说,这玩意的文档写得不错,但是我觉得特坑.所以这篇博文,会记录一些我使用这个库的时候碰到的一些坑,以及如何跨过这些坑.慢慢来更新吧,当然,以后如果不用了,文章估计也不会更新了,当然,我也没有打算说,这篇文章有多少人能看.就这样吧.

聚类

坑1: 如何自定义距离函数?

虽然说scikit-learn这个库实现了很多的聚类函数,但是这些算法使用的距离大部分都是欧氏距离或者明科夫斯基距离,事实上,根据我们教材上的描述,所谓的距离,可不单单仅有这两种,为了不同的目的,我们可以用不同的距离来度量两个向量之间的距离,但是很遗憾,我并没有看见scikit-learn中提供自定义距离的选项,网上搜了一大圈也没有见到.

但是不用担心,我们可以间接实现这个东西.以DBSCAN算法为例,下面是类的一个构造函数:

class sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric='euclidean', algorithm='auto', leaf_size=30, p=None, n_jobs=1)
# eps表示两个向量可以被视作为同一个类的最大的距离
# min_samples表示一个类中至少要包含的元素数量,如果小于这个数量,那么不构成一个类

我们要特别注意一下metric这个选项,我们来看一下选项:

metric : string, or callable
    The metric to use when calculating distance between instances in a feature array. If metric is a string or callable, it must be one of the options allowed by metrics.pairwise.calculate_distance for its metric parameter. 
    If metric is “precomputed”, X is assumed to be a distance matrix and must be square. X may be a sparse matrix, in which case only “nonzero” elements may be considered neighbors for DBSCAN.
    New in version 0.17: metric precomputed to accept precomputed sparse matrix.

这段描述其实透露了一个很重要的信息,那就是其实你可以自己提前计算各个向量的相似度,构成一个相似度的矩阵,只要你设置metric='precomputedd'就行,那么如何调用呢?

我们来看一下fit函数.

fit(X, y=None, sample_weight=None)
# X : array or sparse (CSR) matrix of shape (n_samples, n_features), or array of shape (n_samples, n_samples)
# A feature array, or array of distances between samples if metric='precomputed'.

上面的注释是什么意思呢,我翻译一下,如果你将metric设置成了precomputed的话,那么传入的X参数应该为各个向量之间的相似度矩阵,然后fit函数会直接用你这个矩阵来进行计算.否则的话,你还是要乖乖地传入(n_samples, n_features)形式的向量.

这意味着什么,同志们.这意味着我们可以用我们自定义的距离事先计算好各个向量的相似度,然后调用这个函数来获得结果,是不是很爽.

具体怎么来编程,我给个例子,抛个砖.

import numpy as np
from sklearn.cluster import DBSCAN
if __name__ == '__main__':
    Y = np.array([[0, 1, 2],
                  [1, 0, 3],
                  [2, 3, 0]]) # 相似度矩阵,距离越小代表两个向量距离越近
    # N = Y.shape[0]
    db = DBSCAN(eps=0.13, metric='precomputed', min_samples=3).fit(Y)
    labels = db.labels_
    # 然后来看一下分类的结果吧!
    n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) # 类的数目
    print('类的数目是:%d'%(n_clusters_))

我们继续来看一下AP聚类,其实也很类似:

class sklearn.cluster.AffinityPropagation(damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=None, affinity='euclidean', verbose=False)

关键在这个affinity参数上:

affinity : string, optional, default=``euclidean``
    Which affinity to use. At the moment precomputed and euclidean are supported. euclidean uses the negative squared euclidean distance between points.

这个东西也支持precomputed参数.再来看一下fit函数:

fit(X, y=None)
# Create affinity matrix from negative euclidean distances, then apply affinity propagation clustering.
# Parameters:   
#   X: array-like, shape (n_samples, n_features) or (n_samples, n_samples) :
#   Data matrix or, if affinity is precomputed, matrix of similarities / affinities.

这里的X和前面是类似的,如果你将metric设置成了precomputed的话,那么传入的X参数应该为各个向量之间的相似度矩阵,然后fit函数会直接用你这个矩阵来进行计算.否则的话,你还是要乖乖地传入(n_samples, n_features)形式的向量.

例子1

"""
    目标:
    ~~~~~~~~~~~~~~~~
    在这个文件里面,我最想测试一下的是,我前面的那些聚类算法是否是正确的.
    首先要测试的是AP聚类.
"""
from sklearn.cluster import AffinityPropagation
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
from sklearn.metrics.pairwise import euclidean_distances
import matplotlib.pyplot as plt
from itertools import cycle

def draw_pic(n_clusters, cluster_centers_indices, labels, X):
    ''' 口说无凭,绘制一张图就一目了然. '''
    colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
    for k, col in zip(range(n_clusters), colors):
        class_members = labels == k
        cluster_center = X[cluster_centers_indices[k]] # 得到聚类的中心
        plt.plot(X[class_members, 0], X[class_members, 1], col + '.')
        plt.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col,
                 markeredgecolor='k', markersize=14)
        for x in X[class_members]:
            plt.plot([cluster_center[0], x[0]], [cluster_center[1], x[1]], col)

    plt.title('Estimated number of clusters: %d' % n_clusters)
    plt.show()


if __name__ == '__main__':
    centers = [[1, 1], [-1, -1], [1, -1]]
    # 接下来要生成300个点,并且每个点属于哪一个中心都要标记下来,记录到labels_true中.
    X, labels_true = make_blobs(n_samples=300, centers=centers,
                                cluster_std=0.5, random_state=0)
    af = AffinityPropagation(preference=-50).fit(X) # 开始用AP聚类
    cluster_centers_indices = af.cluster_centers_indices_ # 得到聚类的中心点
    labels = af.labels_ # 得到label
    n_clusters = len(cluster_centers_indices) # 类的数目
    draw_pic(n_clusters, cluster_centers_indices, labels, X)

    #===========接下来的话提前计算好距离=================#
    distance_matrix = -euclidean_distances(X, squared=True) # 提前计算好欧几里德距离,需要注意的是,这里使用的是欧几里德距离的平方
    af1 = AffinityPropagation(affinity='precomputed', preference=-50).fit(distance_matrix)
    cluster_centers_indices1 = af1.cluster_centers_indices_ # 得到聚类的中心
    labels1 = af1.labels_ # 得到label
    n_clusters1 = len(cluster_centers_indices1) # 类的数目
    draw_pic(n_clusters1, cluster_centers_indices1, labels1, X)

两种方法都将产生这样的图:

AP聚类

例子2

既然都到这里了,我们索性来测试一下DBSCAN算法好了.

"""
    目标:
    ~~~~~~~~~~~~~~
    前面已经测试过了ap聚类,接下来测试DBSACN.
"""
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
from sklearn.metrics.pairwise import euclidean_distances

def draw_pic(n_clusters, core_samples_mask, labels, X):
    ''' 开始绘制图片 '''
    # Black removed and is used for noise instead.
    unique_labels = set(labels)
    colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels)))
    for k, col in zip(unique_labels, colors):
        if k == -1:
            # Black used for noise.
            col = 'k'

        class_member_mask = (labels == k)

        xy = X[class_member_mask & core_samples_mask]
        plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=col,
                 markeredgecolor='k', markersize=14)

        xy = X[class_member_mask & ~core_samples_mask]
        plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=col,
                 markeredgecolor='k', markersize=6)

    plt.title('Estimated number of clusters: %d' % n_clusters)
    plt.show()

if __name__ == '__main__':
    #=========首先产生数据===========#
    centers = [[1, 1], [-1, -1], [1, -1]]
    X, labels_true = make_blobs(n_samples=750, centers=centers,
                                cluster_std=0.4, random_state=0)
    X = StandardScaler().fit_transform(X)
    #=========接下来开始聚类==========#
    db = DBSCAN(eps=0.3, min_samples=10).fit(X)
    labels = db.labels_ # 每个点的标签
    core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
    core_samples_mask[db.core_sample_indices_] = True
    n_clusters = len(set(labels)) - (1 if -1 in labels else 0) # 类的数目
    draw_pic(n_clusters, core_samples_mask, labels, X)
    #==========接下来我们提前计算好距离============#
    distance_matrix =  euclidean_distances(X)
    db1 = DBSCAN(eps=0.3, min_samples=10, metric='precomputed').fit(distance_matrix)
    labels1 = db1.labels_ # 每个点的标签
    core_samples_mask1 = np.zeros_like(db1.labels_, dtype=bool)
    core_samples_mask1[db1.core_sample_indices_] = True
    n_clusters1 = len(set(labels1)) - (1 if -1 in labels1 else 0) # 类的数目
    draw_pic(n_clusters1, core_samples_mask1, labels1, X)

两种方法都将产生这样的图:

DBSCAN聚类

 

【Scikit-learn】【入门】简介 + Scikit-learn六大功能 1.简介(1)SciPy,SciPy是一个开源的基于Python的科学计算工具包。(2)Scikits,基于SciPy针对不同的应用领域发展出众多的分支版本,他们统一称为Scikits,即SciPy工具包的意思(3)Scikit-learn,是针对机器学习出的一个分支版本(开源框架),就是Scikit-learn,这就是Scikit-learn和SciPy的关系。Scikit-learn需要Num... 阅读详情

相关推荐

Scikit-Learn随机森林分类

在随机森林中,集成模型中的每棵树构建时的样本都是由训练集经过随机有放回抽样自助式采样法(Bootstrap Sampling)得来的另外,在构建树的过程中进行节点划分时,选择的划分点是基于所有特征中的随机子集的最佳划分点随机森林的随机性主要体现在两个方面:一是决策树训练样本的随机选取,二是决策树节点划分属性特征的随机选取这两个随机性的目的是降低森林估计器的方差。事实上,单个决策树通常表现出很高的方差,并且往往会过拟合。

Java/Python大数据随笔 1892

【python ML系列】python knn KNeighborsClassifier 最近邻算法选项用法示例详解

python knn KNeighborsClassifier 最近邻算法选项用法示例详解

wang2leee的博客 1564

Scikit-Learn线性回归(一)

线性回归(Linear Regression)是很基础的机器学习算法。回归(Regression)是一种应用广泛的预测建模技术,这种技术的核心在于预测的结果是连续型变量回归是监督学习中的一个重要问题,用于预测输入变量(自变量)和输出变量(因变量)之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化,回归模型正是表示从输入变量到输出变量之间映射的函数其中,自变量表示主动操作的变量,可以看做因变量的原因。因变量因为自变量的变化而变化,可以看做自变量的结果。

Java/Python大数据随笔 2287

【机器学习聚类算法实战-3】 | Scikit-Learn工具包进阶指南:机器学习聚类算法之k-均值聚类、亲密传播聚类算法、带结构和无结构的凝聚聚类、谱聚类实战分析

机器学习聚类分析是一种通过机器学习技术将数据点划分为不同的组或簇的方法。这种方法可以帮助识别数据中的模式、群体或异常情况,从而更好地理解数据的结构和特征。常见的机器学习聚类算法包括K-means、层次聚类、DBSCAN等,它们在不同场景下具有不同的优势和适用性。在进行机器学习聚类分析时,需要考虑数据的特点、选择合适的算法和参数,并对结果进行解释和验证。在机器学习中,常见的聚类算法包括:将数据点分成预先指定的 k 个簇,每个簇具有最小化簇内平方误差的中心点。

一伦明悦的博客 1262

Scikit-Learn K均值聚类

K-Means算法通过把样本分离成n个具有相同方差的类的方式来对数据进行聚类,最小化一个称为惯量或簇内平方和的准则。该算法需要指定簇的数量。K-Means算法的基本原理是:根据样本特征的相似度或距离远近,将样本(N个点)划分成若干个类(K个集群),使得每个点都属于离其最近的中心点(均值)对应的类(集群)根据算法原理,常用的聚类算法可分为:基于划分的聚类算法K-Means、基于层次的聚类算法HC、基于密度的聚类算法。K-Means假设一个样本属于一个类,K-Means的类别是样本的中心(均值);

Java/Python大数据随笔 1391

Scikit-learn

Scikit-learn Scikit-learn简介 ​ 第三方模块,对机器学习的算法进行了封装,包括回归、降维、分类和聚类四大机器学习方法。是Scipy模块的扩展,建立在Numpy和Matplotlib基础上,是简单高效的数据挖掘和数据分析工具。 Scikit-learn安装 pip install -U scikit-learn 要求python版本高于2.7版本,Numpy版本高于1.8.2。 线性模型 Scikit-learn对于繁琐的线性回归求解数学过程设计好了线性模型,通过直接调用其line

asdfghjop的博客 1432

python sklearn库中的AffinityPropagation( )聚类算法主要参数的使用,

class sklearn.cluster.AffinityPropagation(damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=None, affinity=’euclidean’, verbose=False)函数参数    damping : float, optional, default: 0....

manjhOK的博客 1万+

Scikit-learn的安装

Scikit-learn的安装 首先打开加州大学底下一个实验室的网站,下载以下安装包: 1、Numpy+MKL:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 2、Scipy:http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy 3、scikit-learn:http://www.lfd.uci.edu/...

kangzai_1225的博客 4467

DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式

一、DBSCAN聚类概述基于密度的方法的特点是不依赖于距离,而是依赖于密度,从而克服基于距离的算法只能发现“球形”聚簇的缺点。 DBSCAN的核心思想是从某个核心点出发,不断向密度可达的区域扩张,从而得到一个包含核心点和边界点的最大化区域,区域中任意两点密度相连。1、伪代码 算法: DBSCAN 输入: E — 半径 MinPts — 给定点在 E 领域内成为核心对象的

素质云笔记 3万+

AI Agent核心架构解析:从Tool、Skill到MCP协议的智能体构建实战

在人工智能领域,大语言模型(LLM)赋予了AI自主规划与决策的能力,推动了智能体(Agent)技术的演进。其核心原理在于构建一个具备感知、规划、行动与反思能力的自主系统。这一架构的技术价值在于将AI从被动应答升级为主动执行复杂任务的工作伙伴,显著提升了自动化水平与问题解决效率。应用场景广泛覆盖了市场分析、自动化办公、智能客服与垂直领域集成等。本文聚焦于实现这一能力的关键组件:基础工具(Tool)、组合技能(Skill)与标准化协议(MCP)。其中,Skill通过封装多个Tool形成可复用的高级能力,而MCP

chuannaoxuan4674的博客 321

HDMI协议介绍(二)--DataIsland Packets

前文简单介绍了HDMI传输的三个周期:控制周期、DataIsland周期和Video周期。DataIsland传输音频和辅助数据,这些数据以Packet的形式传输。本文简单介绍DataIsland Packet。

SlamDunk的博客 5673

scikit-learn 安装教程

scikit-learn 安装教程 一、安装Python python官网下载 二、更新pip 打开命令行,输入 python -m pip install --upgrade pip 三、下载安装包 官网安装包下载地址 必须版本兼容,操作系统64位,下载4个whl文件 cp39表示Python3.9版本,win_arm64指的是64位版本,根据自己的Python版本号选择 以下是四个依赖包: matplotlib-3.4.3-cp39-cp39-win_amd64.w.

frcbob的博客 4万+

Geneformer实战指南:基于Hugging Face Transformers的基因序列分类模型解析

本文详细解析了基于Hugging Face Transformers的Geneformer模型在基因序列分类任务中的应用。通过介绍模型架构、数据处理流程和实战案例,帮助生物信息学研究者掌握这一前沿技术,实现高效的基因表达数据分析与分类。

weixin_28224217的博客 582

scikit-learn初级

s第一章 scikit-learn初级 官网:https://scikit-learn.org/stable/index.html 1.1 Scikit-Learn简介 Scikit-Learn(简称Sklearn)是Python的第三方模块,它是机器学习领域中知名的Python模块之一,它对常用的机器学习算法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classification)和聚类(Clustering)四大机器学习算法。Scikit

weixin_50559423的博客 8270

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 444

实战:RK3568 Android14 调试 MIPI DSI 液晶屏

LCD1_RST -> 对应原理图网络连接到 GPIO。LCD1_PWR_EN ->用于给屏幕 VCC 供电。LCD0_BL_EN / LCD0_BL_PWM -> MP3302 升压芯片驱动 LED 灯条。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/100f2be7f763494da1032464e272e63b.png&pinctrl {/* 配置 LCD_RST 和 LCD_EN */

qq_33427070的博客 1548

Scikit-learn的安装过程

Scikit-learn的安装过程 首先,安装SK-Learn需要依赖的Python安装包有: Python (>= 2.6), NumPy (>= 1.3), SciPy (>= 0.7), setuptools, Python development headers and a working C++ compiler.   安装过程: 1:安装python。下载

ShiZhixin的专栏 2万+

USB2.0协议解读

就写到这吧,其他协议层等属于软件需要了解的东西了。简单看了下,本文总结的有点乱,有两个原因吧,其一是理解的不够透彻,无法用简单明了的语言总结;其二是感觉这个协议文档章节划分的也不是很好,有点大杂烩。

qflook的博客 3673

Scikit-Learn入门教程

来源:尤而小屋Scikit-learn是一个非常知名的Python机器学习库,它广泛地用于统计分析和机器学习建模等数据科学领域。建模无敌:用户通过scikit-learn能够实现各种监督和...

Python数据之道 1万+

【深度学习驱动流体力学】采集OpenFOAM仿真数据作为AI模型训练数据集与卷积神经网络搭建到预测(一站式完整代码实现)

采集OpenFOAM仿真数据作为AI模型训练数据集与卷积神经网络搭建到预测(一站式完整代码实现)

源代码杀手的博客 1414

【人工智能之深度学习】15. 工业时序预测实战:LSTM与TCN融合的装备故障预警系统设计与实现

摘要:工业装备故障预警是智能制造领域的核心技术之一,其通过分析传感器时序数据实现故障提前预测,可显著降低运维成本并提升设备可靠性。本文针对工业时序数据多源异构、非平稳性、噪声干扰及样本不平衡等挑战,提出一种LSTM与TCN融合的故障预警架构——利用TCN捕捉局部时序特征,结合注意力增强LSTM建模长期依赖关系,通过门控机制实现特征自适应融合。以3MW风电齿轮箱为研究对象,设计包含数据预处理、特征工程、模型训练及部署的完整流程,实验结果表明,该融合模型准确率达94.6%,故障预测提前量较单一模型提升30%以上

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1441

机器学习库Scikit-learn

本文目录3.1 背景知识3.2 Scikit-learn概述3.3 Scikit-learn主要用法3.3.1 基本建模流程3.3.2 数据预处理3.3.3 监督学习算法3.3.4 无监督学习算法3.3.5 评价指标3.3.6 交叉验证及超参数调优3.4 Scikit-learn总结参考文献Scikit-learn是基于NumPy、SciPy和Matplotlib的开源Python机器学习包,它封...

fengdu78的博客 8631

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Scikit-learn库的基础与使用

Scikit-learn的发展始于2007年,由David Cournapeau在Google Summer of Code项目中启动。项目后续得到了许多开发者的贡献,包括INRIA(法国国家信息与自动化研究所),Waikato大学和其他机构。项目之所以取名为Scikit-Learn,也是因为该算法库是基于SciPy来进行的构建,而Scikit则是SciPy Kit(SciPy衍生的工具套件)的简称Scikit-learn是目前机器学习领域最完整、同时也是最具影响力的算法库。

hellozhxy的博客 5245

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

scikit-learn安装步骤

scikit-learn安装步骤scikit-learn简介什么是scikit-learn?scikit-learn可以做什么?scikit-learn安装 scikit-learn简介 什么是scikit-learn? python的机器学习工具 简单高效的数据挖掘和数据分析工具 每个人都可以访问,并且可以在各种情况下重用 基于NumPy,SciPy和matplotlib构建 开源,可商业使用...

Work hard 2万+
上一篇: 基于K-means的动态主题模型话题分类
下一篇: Beautiful Soup常用操作
shell
博客等级 码龄16年 25粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值