Fivk博客 - python
type: channel
link: https://blog.fivk.cn/category/python/
description: python 冲冲冲
items: 【Pyenv使用教程】轻松管理Python版本的入门与进阶指南
items: Python源码安装与卸载指南
items: 【深度学习】PyTorch中Variable变量的作用是什么
items: 【机器学习】单层感知机
items: 【期末复习】数据科学导论之最后的晚餐
items: 【期末复习】数据科学导论
items: 【Python】线性回归
items: 【Python】pandas DataFrame 数据转化为 列表 list的方法
items: 【Python】线性回归模型
items: 【python】数据分析模型

【Pyenv使用教程】轻松管理Python版本的入门与进阶指南
type: item
date: 2025-03-20T11:35:00+08:00
description: [scode type="blue" size="simple"]在日常开发中，我们往往需要在同一台机器上安装和切换多个 Python 版本。pyenv 正是为此而生的一款工具，它能帮助我们方便地安装、管理和切换 Python 版本，让开发环境更加灵活。本文将详细介绍 pyenv 的安装、配置、常用命令及注意事项，帮助你快速上手并高效使用 pyenv。[/scode]1. 什么是 pyenv？pyenv 是一个轻量级的 Python 版本管理工具，它允许用户在同一台机器上安装和管理多个 Python 版本。无论你是要切换全局版本，还是为项目设置局部版本，pyenv 都能轻松实现。通过简单的命令，你可以：查看已安装的 Python 版本列表安装新版本的 Python设置全局或局部的默认 Python 版本快速切换不同项目的 Python 环境2. 安装 pyenv自动安装最便捷的安装方式是使用官方推荐的自动安装脚本。打开终端，运行以下命令：curl https://pyenv.run | bash该脚本会自动下载并安装 pyenv 以及相关插件（如 pyenv-virtualenv、pyenv-update 等）。手动安装如果你更倾向于手动安装，可以按照以下步骤操作：克隆 pyenv 仓库到本地（假设安装在 ~/.pyenv）：git clone https://github.com/pyenv/pyenv.git ~/.pyenv根据需要安装其他插件，比如 pyenv-virtualenv：git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv3. 环境配置安装完成后，需要将 pyenv 的可执行文件添加到系统 PATH 中，并在 shell 初始化时加载 pyenv。以 bash 为例，可以在 ~/.bashrc 或 ~/.bash_profile 文件中添加如下配置：# 将 pyenv 添加到 PATH export PATH="$HOME/.pyenv/bin:$PATH" # 初始化 pyenv eval "$(pyenv init --path)" eval "$(pyenv init -)"如果你使用 zsh，则需要在 ~/.zshrc 中做相同的配置。完成后，重新加载配置文件或重启终端即可。4. 使用 pyenv 安装 Python 版本安装好 pyenv 后，就可以开始安装所需的 Python 版本了。查看可用的 Python 版本列表：pyenv install --list安装特定版本，例如安装 Python 3.9.2：pyenv install 3.9.2安装过程可能需要一些编译依赖，请根据提示安装相应的依赖库。如果遇到问题，请参考官方文档中的依赖说明。5. 切换与管理 Python 版本设置全局默认版本安装完成后，可以使用 pyenv global 命令设置全局默认的 Python 版本：pyenv global 3.9.2这会让所有未单独指定 Python 版本的终端会话默认使用 3.9.2。设置局部版本在项目目录下，你可以使用 pyenv local 命令为该目录（及其子目录）指定特定的 Python 版本：pyenv local 3.8.10这会在项目目录中生成一个 .python-version 文件，记录当前目录使用的 Python 版本。列出已安装的版本使用以下命令查看当前已安装的所有 Python 版本：pyenv versions快速切换你可以临时使用特定版本运行 Python 脚本，而无需改变全局或局部设置：pyenv shell 3.7.9 python --version6. 常见问题及解决方案依赖问题在安装某些 Python 版本时，可能会提示缺少编译依赖。请参考系统的包管理工具安装缺少的依赖项（如 libssl-dev、zlib1g-dev 等）。命令未生效如果在配置了环境变量后仍无法使用 pyenv，请确认配置文件已正确加载，并尝试重启终端或执行 source ~/.bashrc。权限问题如果安装或运行过程中遇到权限问题，建议检查当前用户是否有足够的权限来修改相应目录，或者考虑使用 sudo 安装相关依赖，但一般不建议对 pyenv 本身使用 sudo。7. 总结pyenv 为 Python 开发者提供了一个便捷的版本管理工具，通过简单的命令可以轻松安装、切换和管理多个 Python 版本。无论你是在开发不同项目，还是需要测试不同版本的兼容性，pyenv 都能大大简化你的工作流程。希望这篇教程能帮助你快速上手，享受灵活高效的 Python 开发体验。更…

Python源码安装与卸载指南
type: item
date: 2025-03-20T11:18:00+08:00
description: [scode type="blue" size="simple"]在开发和运维过程中，我们经常需要在不同的 Linux 发行版上安装特定版本的 Python。由于各发行版的包管理器及依赖名称不同，直接利用系统自带的软件包有时无法满足需求。本文介绍一种通用的方法：通过源码编译安装 Python，同时附上卸载步骤。这种方式基本适用于 CentOS 和 Ubuntu，并能支持大部分 Python 版本（无论是 2.x 还是 3.x），只要对应版本的源码可用。[/scode]1. 为什么选择源码安装？通用性高：源码编译的方式独立于系统自带包管理器，适用于大多数 Linux 发行版；版本自由：无论你需要最新版本还是历史版本，都可以从 Python 官方网站或镜像站点获取源码；定制性强：可通过编译选项进行优化、定制安装目录，避免干扰系统默认的 Python 环境。提示： 如果你对编译过程不是很熟悉，也可以考虑 pyenv 来管理多个 Python 版本，但本文将重点介绍源码编译方法。2. 环境准备不同系统的依赖包名称有所不同，下面分别列出 CentOS 和 Ubuntu 的依赖安装步骤。在 Ubuntu 上执行以下命令安装编译所需依赖：sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential libssl-dev libffi-dev zlib1g-dev \ libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev \ libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev在 CentOS 上对于 CentOS 系统，首先安装开发工具组及常用依赖：sudo yum groupinstall "Development Tools" sudo yum install openssl-devel bzip2-devel libffi-devel zlib-devel ncurses-devel \ readline-devel sqlite-devel gdbm-devel db4-devel libpcap-devel xz-devel tk-devel注意：依赖包名称可能因 CentOS 版本而略有差异，请根据实际情况调整。3. 下载与编译 Python1.下载源码从 Python 官方下载页面 或国内镜像站下载你需要安装的 Python 源码包。例如，下载 Python 3.7.17：wget https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tgz2.解压源码包tar -xf Python-3.7.12.tgz cd Python-3.7.123.配置与编译配置时建议指定安装目录，并开启优化选项。为了避免覆盖系统默认 Python，使用 altinstall：./configure --prefix=/usr/local/python3.7.17 --enable-optimizations make -j$(nproc) sudo make altinstall[collapse status="false" title="【点击展开】make install与make altinstall的区别"] 在 Linux 系统上使用 make altinstall代替make install 主要是为了避免覆盖系统默认的 Python 版本。make install vs. make altinstallmake install默认会安装 Python，并创建或覆盖 /usr/bin/python 这个符号链接（symlink）。可能会影响系统的默认 Python 版本，从而导致某些系统工具（如 yum、dnf 等）出问题。make altinstall不会创建 /usr/bin/python 符号链接。只会安装 pythonX.Y（比如 python3.9），但不会覆盖 python 的默认版本。适用于多版本共存，比如安装 Python 3.9，但仍然保留 Python 2.7 作为默认版本。示例./configure --enable-optimizations make -j$(nproc) sudo make altinstall执行后：python3.9 可用（如果编译的是 3.9）。python 仍指向系统默认的 Python 版本（如 2.7 或 3.6）。如何切换 Python 版本如果需要使用新安装的 Python…

【深度学习】PyTorch中Variable变量的作用是什么
type: item
date: 2022-01-25T21:47:00+08:00
description: PyTorch中Variable变量的作用是什么，很多新手对此不是很清楚，为了帮助大家解决这个难题，下面将为大家详细讲解，有这方面需求的人可以来学习下，希望你能有所收获。一、Variable的定义：import torch from torch.autograd import Variable # torch 中 Variable 模块 tensor = torch.FloatTensor([[1,2],[3,4]]) # 把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度 variable = Variable(tensor, requires_grad=True) print(tensor) """ 1 2 3 4 [torch.FloatTensor of size 2x2] """ print(variable) """ Variable containing: 1 2 3 4 [torch.FloatTensor of size 2x2] """[scode type="yellow"]注：tensor不能反向传播，variable可以反向传播。[/scode]二、Variable求梯度Variable计算时，它会逐渐地生成计算图。这个图就是将所有的计算节点都连接起来，最后进行误差反向传递的时候，一次性将所有Variable里面的梯度都计算出来，而tensor就没有这个能力。v_out.backward() # 模拟 v_out 的误差反向传递 print(variable.grad) # 初始 Variable 的梯度 ''' 0.5000 1.0000 1.5000 2.0000 '''三、获取Variable里面的数据直接print(Variable) 只会输出Variable形式的数据，在很多时候是用不了的。所以需要转换一下，将其变成tensor形式。print(variable) # Variable 形式 """ Variable containing: 1 2 3 4 [torch.FloatTensor of size 2x2] """ print(variable.data) # 将variable形式转为tensor 形式 """ 1 2 3 4 [torch.FloatTensor of size 2x2] """ print(variable.data.numpy()) # numpy 形式 """ [[ 1. 2.] [ 3. 4.]] """扩展在PyTorch中计算图的特点总结如下：autograd根据用户对Variable的操作来构建其计算图。1、requires_gradvariable默认是不需要被求导的，即requires_grad属性默认为False，如果某一个节点的requires_grad为True，那么所有依赖它的节点requires_grad都为True。2、volatilevariable的volatile属性默认为False，如果某一个variable的volatile属性被设为True，那么所有依赖它的节点volatile属性都为True。volatile属性为True的节点不会求导，volatile的优先级比requires_grad高。3、retain_graph多次反向传播（多层监督）时，梯度是累加的。一般来说，单次反向传播后，计算图会free掉，也就是反向传播的中间缓存会被清空【这就是动态度的特点】。为进行多次反向传播需指定retain_graph=True来保存这些缓存。4、backward()反向传播，求解Variable的梯度。放在中间缓存中。

【机器学习】单层感知机
type: item
date: 2022-01-08T15:54:00+08:00
description: 一、感知机概述1.如何理解感知机[scode type="green"]“感”就是感受，必然要输入；“知”就是知道，一定有输出。所以感知机就可以理解为对输入进行处理，得到并输出结果的机器。[/scode]例如，一个人朝你走来，他/她的五官信息作为输入被你的眼睛感受到，然后大脑经过综合分析、处理，得到美还是丑的结论。在这个过程中，大脑就扮演着感知机的角色。为什么大脑和感知机如此相像呢？其实是感知机和大脑像才对。因为先有大脑，再有的感知机。感知机最初的目的就是为了模拟大脑的这种行为的。一句话概括：感知机就是模拟大脑感知的机器。2.感知器介绍感知机（英语：Perceptron）是Frank Rosenblatt在1957年就职于Cornell航空实验室(Cornell Aeronautical Laboratory)时所发明的一种人工神经网络。它可以被视为一种最简单形式的前馈式人工神经网络，是一种二元线性分类器。Frank Rosenblatt给出了相应的感知机学习算法，常用的有感知机学习、最小二乘法和梯度下降法。譬如，感知机利用梯度下降法对损失函数进行极小化，求出可将训练数据进行线性划分的分离超平面，从而求得感知机模型。感知机是生物神经细胞的简单抽象。神经细胞结构大致可分为：树突、突触、细胞体及轴突。单个神经细胞可被视为一种只有两种状态的机器——激动时为‘是’，而未激动时为‘否’。神经细胞的状态取决于从其它的神经细胞收到的输入信号量，及突触的强度（抑制或加强）。当信号量总和超过了某个阈值时，细胞体就会激动，产生电脉冲。电脉冲沿着轴突并通过突触传递到其它神经元。为了模拟神经细胞行为，与之对应的感知机基础概念被提出，如权量（突触）、偏置（阈值）及激活函数（细胞体）。在人工神经网络领域中，感知机也被指为单层的人工神经网络，以区别于较复杂的多层感知机（Multilayer Perceptron）。 作为一种线性分类器，（单层）感知机可说是最简单的前向人工神经网络形式。尽管结构简单，感知机能够学习并解决相当复杂的问题。感知机主要的本质缺陷是它不能处理线性不可分问题。线性分类器的第一个迭代算法是1956年由Frank Rosenblatt提出的。这个算法被提出后，受到了很大的关注。感知器在神经网络发展的历史上占据着特殊的位置：它是第一个从算法上完整描述的神经网络。在20世纪60年代和70年代，受感知器的启发，工程师、物理学家以及数学家们纷纷投身于神经网络不同方面的研究。这个算法在今天看来依然是有效的。二、计算步骤算法图解设有 n维（特征数）输入的单个感知机（如下图所示），X1至 X2为 n维输入向量的各个分量，W1至 W2为各个输入分量连接到感知机的权量（或称权值），W0为偏置，激活函数（又称激励函数或传递函数），Z为标量输出（也称为净输入）。第一步这里 Z称为净输入（net input），它的值等于一个样本的每个维度值 X与维度对应的权重值w相乘后的和。$$ \begin{aligned} Z &= W_1 * X_1 + W_2 * X_2 + ... + W_n * X_n\\ &=\sum_{j=1}^nW_j*X_j\\ &=W^T*X \end{aligned} $$第二步计算结果 Z是一个连续的值，我们需要将结果转换为离散的分类值，因此，这里，我们使用一个转换函数，该函数称为激励函数（激活函数），这里 θ就是阈值。$$ step(z) = \begin{cases} \text{1}, & \text{Z $\ge$ $\theta$} \\ \text{0}, & \text{z $\lt$ $\theta$} \end{cases} $$第三步更新权重感知器是一个自学习算法，即可以根据输入的数据（样本），不断调整权重的更新，最终完成分类。对于权重的更新公式如下：$$ W_j = W_j + \Delta $$$$ \Delta W_j = \eta(y^i-\hat{y}^i)x_j^i $$其中：j表示某一列i表示某一个样本$\eta$：学习速率（一个介于0.0到1.0之间的常数）$y(i)$：是第i个样本的真实类标（即真实值）$y^i$：是第i个样本的预测类标（预测值）。需要注意的是，权重向量中的所有权重值是同时更新的，这意味着在所有的权重 $\Delta w_j$ 更新前，我们无法重新计算$y^i$。这里的i和j怎么理解？每次计算Z是同一个样本的维度值和权重值相乘之和，每次更新权重值会对每个权重值进行更新。类标是什么？类标就是分类的标签，在这里类标就是1或者0。更新原则感知器的权重更新依据是：如果预测准确，则权重不进行更新，否则，增加权重，使其更趋向于正确的类别。以下介绍感知器的推到过程（内核），体验一下感知器规则的简…

【期末复习】数据科学导论之最后的晚餐
type: item
date: 2021-12-20T20:50:00+08:00
description: 填空1.简述数据清洗阶段平滑噪声数据常见的三种方法？[collapse status="false" title="答案"]分箱：通过考察数据周围的值，采用近邻来光滑有序数据的值。回归：查找拟合合两个属性的“最佳”线,使得其中一个属性可以用于预测出另一个属性。聚类：将离散点组成簇和群。[/collapse]2.什么是数据变换？[collapse status="false" title="答案"]数据变换是将数据转化成适合挖掘的形式。[/collapse]3.简述什么是最佳拟合线。[collapse status="false" title="答案"]最佳拟合线指的是在散点图上绘制的一条直线，使得在这条直线上尽可能多的通过数据点，使大部分数据落在这条线上或离这条线很近。[/collapse]4.试述购物篮分析法有几种及它们所应用的场所。[collapse status="false" title="答案"]购物篮分析法有2种分类。第一类是美式购物篮分析法 ，适用于卖场面积大 、商品种类多 、商品陈列区域距离相差大 的卖场，类似于沃尔玛；第二类是日式购物篮分析法 ，适用于营业面积小 ，商品种类少 、商品陈列区域距离相差小 的卖场，类似于便利店。[/collapse]5.请简述什么是大数据傲慢。[collapse status="false" title="答案"]大数据傲慢指以为利用大数据分析就可以完全忽略和取代传统数据的收集分析方法。[/collapse]6.简述基于内容的推荐算法思路和基于人口统计学的推荐算法思路。[collapse status="false" title="答案"]基于内容推荐：根据物品的内容来分类，类似的物品间进行推荐。基于人口统计：给用户来进行分类，根据用户的喜好推荐给相似的用户。[/collapse]7.简述决策树建立的步骤。[collapse status="false" title="答案"]决策树建立的步骤特征选择：构建根节点，使所有的训练数据放在根节点，选择最优的特征，分割子集，使得各个子集在当前的条件下有一个好的分类。决策树的生成：子集能够基本正确分类则可以构建叶节点，并把这些子集分到所对应的叶节点去，子集如果不能正确分类则选择最优的特征继续进行分割，直到所有的训练子集被基本正确分类。决策树的修剪[/collapse]8.简述什么是数据可视化。[collapse status="false" title="答案"]数据可视化是指利用计算机图形学等技术，将数据通过图形化的方式展示出来，直观的表达数据中蕴含的信息，规律和逻辑，便于用户进行观察和理解。[/collapse]9.可视化的目的是什么？[collapse status="false" title="答案"]挖掘数据有用信息分析数据形成规律预测数据未来走势[/collapse]10.可视化的一般过程，包括哪些步骤。[collapse status="false" title="答案"]（1）过滤：是选择原始数据集的一部分可视化（2）映射：是指将抽象的数据转化为可视化表示的过程（3）渲染：是指通过图形渲染库和显示卡的帮助，把经过映射的数据，以二维或者三维图形的形式绘制出来。（4）交互：是指计算机对用户的某种特定动作，作出反应。[/collapse]11.简述可视化的原则[collapse status="false" title="答案"]1.可视化的首要原则是准确和清洗2.可视化的结果要阐述事物的相关关系和变化趋势3.使用用户熟悉的事物进行数据比较4.构造实物场景，生动的展示数据[/collapse]主观题1.计算准确率与召回率计算信息检索系统评价指标，一个是准确率，一个是召回率如下图的检索结果，请计算此系统的准确率和召回率。 实际上相关的文档实际上不相关的文档检索系统返回的、判断为相关的文档153检索系统不返回的、判断为不相关的文档2510[collapse status="false" title="【算法分析】"]没什么好分析的看图上公式：[/collapse][collapse status="false" title="【参考程序】"]准确率 = $\frac{15+10}{15+3+25+10}\quad$ = $\frac{25}{53}\quad$召回率 = $\frac{15}{15+25}\quad$ = $\frac{3}{8}\quad$[/collapse]2.计算K-means[scode type="blue"]1.假设采用K-means聚类算法将下表的用户分成两类，请描述K-means聚类算法过程，距离函数采用余弦相似度。[/scode]用户CDE12342153354143325412[collapse…

【期末复习】数据科学导论
type: item
date: 2021-11-29T12:16:00+08:00
description: [scode type="green"]选择题看历次课前测试[/scode]常见的有监督学习算法支持向量机（Support Vector Machines线性回归（linear regression）逻辑回归（logistic regression）朴素贝叶斯（naive Bayes）线性判别分析（linear discriminant analysis）决策树（decision trees）K-近邻（k-nearest neighbor algorithm）Multilayer perceptron[scode type="blue"]K-means算法为无监督学习算法[/scode]经典案例分类[collapse status="false" title="关联分析"]购物篮分析法亚马逊的个性化推荐潘多拉音乐组计划塔吉特的大数据营销[/collapse][collapse status="false" title="趋势预测"]谷歌流感趋势奥斯卡预测Farecast案例详析Decide案例详析[/collapse][collapse status="false" title="决策支持"]美国总统大选《纸牌屋》[/collapse]填空题1.数据科学是一门通过 填空 1 来获取 填空 2 的科学。[collapse status="false" title="答案"]正确答案：填空 1：系统性研究填空 2：与数据相关的知识体系[/collapse]2.可视化领域包括三个主要分支，分别是 填空 1 、 填空 2 以及 填空 3等。[collapse status="false" title="答案"]正确答案：填空 1：科学可视化填空 2：信息可视化填空 3：可视分析[/collapse]3.大数据能被用于打击罪犯的特征有真实性、填空 1、填空 2 。[collapse status="false" title="答案"]正确答案：填空 1：多样性填空 2：速度PS：大数据的4V特征：体量多样性真实性（价值性）速度[/collapse]4.谷歌流感监测是大数据在 填空 1 方面的应用。[collapse status="false" title="答案"]正确答案：填空 1：趋势预测PS：大数据的应用预测推荐商业情报分析科学研究[/collapse]5.有训练样本，有标注的机器学习称为 填空 1 学习，而有训练样本无标注的机器学习称为 填空 2 学习。[collapse status="false" title="答案"]正确答案：填空 1：有监督填空 2：无监督[/collapse]6.列举两个基于python的中文处理工具包 填空 1 、 填空 2。[collapse status="false" title="答案"]正确答案：填空 1：jieba填空 2：thulacPS：jieba【推荐】thulac（清华大学） ：处理utf-8编码SnowNLP：处理unicode编码，使用时需要decode/unicode，包括情感分析部分的分词处理pynlpirCoreNLPpyNLP（哈工大)NLPIP：可处理少数民族语言的分词包[/collapse][scode type="yellow"]以上是去年测试题[/scode][scode type="blue"]以下是历次课前测试填空题[/scode]7.python中注释语句符号为 填空 1[collapse status="false" title="答案"]正确答案：填空 1：#[/collapse]8.python中 填空 1 数据结构能容纳不同类型的数据。[collapse status="false" title="答案"]正确答案：填空 1：list[/collapse]9.python中else与if连写为 填空 1[collapse status="false" title="答案"]正确答案：填空 1：elif[/collapse]10.填空 1库是面向Python的机器学习软件包，它可以支持主流的有监督机器学习方法和无监督机器学习方法。[collapse status="false" title="答案"]正确答案：填空 1：scikit-learn[/collapse]11.Anaconda中安装第三方库所用的命令可以在库名前加 填空 1 。[collapse status="false" title="答案"]正确答案：填空 1：pip install[/collapse]12.填空 1 是 Python 语言的一个扩展程序库，支持大量的维度数组与矩阵运算，此外也针对数组运算提供大量的数学函数库。[collapse status="false" t…

【Python】线性回归
type: item
date: 2021-11-08T11:27:00+08:00
description: [scode type="blue"]简介[/scode]Python之所以如此受欢迎的一个原因就在于它能够应用于数据分析和挖掘方面的工作。不仅是在工业化运用还是在科学研究中，Python提供了非常方便和高性能的应用接口，是人们只需要关注数据本身，而不需要花太多的精力在方法上。线性回归 模型是最常见的统计模型，它反映了系统整体的运动规律。从数学的角度讲，就是根据系统的总体静态观测值，通过算法去除随机性的噪点，发现系统整体运动规律的过程。最简单的线性回归是基于最小二乘法进行拟合的，同时根据自变量的个数，分为一元线性回归分析 和多元线性回归分析 。[scode type="blue"]一元线性回归分析[/scode]一元线性回归方程如下：y=a*x+b其中a为权重或者斜率，b为截距，我们的目标是研究x和y之间的关系。假设有如下数据集：xy-3.51-4.18-4.31-2.39-2.68-6.33-3.4-4.22-4.12-3.21-2.81-5.62-3.5-4.46我们的目标就是拟合一条线性方程，在这里首先导入需要的库：import pandas as pd import matplotlib.pyplot as plt from sklearn import linear_model使用sklearn库中的 linear_model 能够快速搭建训练模型。具体代码如下：x = [-3.51, -4.31, -2.68, -3.4, -4.12, -2.81, -3.5] y = [-4.18, -2.39, -6.33, -4.22, -3.21, -5.62, -4.46] data = pd.DataFrame({'x': x, 'y': y}) x = data'x' y = data['y'] # 构建模型 reg = linear_model.LinearRegression() # 训练模型 reg.fit(x, y) # 评估模型 print(reg.coef_) # 斜率 print(reg.intercept_) # 截距 print(reg.score(x, y)) # R2值 # 预测并可视化 plt.scatter(x, y) plt.plot(x, reg.predict(x), color='red') plt.show()在这里输入数据处理稍微复杂，主要是为了构建一个DataFrame型的数据，这样的做法主要是考虑到大多数时候我们都是从文件中读取内容，因而使用pandas读取构建data数据。主要经历以下步骤：接下来调用 LinearRegression() 方法构建线性回归模型；训练模型只需要使用 fit()函数就能轻松实现；然后分析模型的参数和$R^2$ 值；最终我们将拟合的效果可视化。输出的结果如下：[-2.17951421] -11.91965440487348 0.9715399906543265它的斜率为-2.17，截距为-11.92，$R^2$ 值为0.97。表明x与y之间具有强相关性，并且是负相关的关系。可视化的图片如下：[scode type="blue"]多元线性回归分析[/scode]与一元线性回归不同，多元线性回归会出现多个自变量。它的形式如下：y=a*x1+b*x2+c其中a和b为权重，c为截距。同样，我们考察以下数据集：x1x2y-3.51-3.45.23-4.31-3.934.25-2.68-2.986.75-3.4-3.295.81-4.12-3.884.7-2.81-2.866.78-3.5-3.586.03通过Seaborn实现Seaborn提供了非常方便的可视化接口，能够快速实现线性回归拟合。代码实现如下：import pandas as pd import matplotlib.pyplot as plt import seaborn as sns x1 = [-3.51, -4.31, -2.68, -3.4, -4.12, -2.81, -3.5] x2 = [-3.4, -3.93, -2.98, -3.29, -3.88, -2.86, -3.58] y = [5.23, 4.25, 6.75, 5.81, 4.7, 6.78, 6.03] data = pd.DataFrame({'x1': x1, 'x2': x2, 'y': y}) sns.pairplot(data, x_vars=['x1', 'x2'], y_vars='y', kind='reg', size=5) plt.show()pairplot() 函数可以直接将DataFrame类型的数据可视化，通过 kind 参数选择 reg 方法，最终得到如下图：图中表明（x…

【Python】pandas DataFrame 数据转化为 列表 list的方法
type: item
date: 2021-11-03T22:25:04+08:00
description: 我们可以先将我们的数据转化为np.array格式，然后再转化为list格式即可。 代码示例为： import pandas as pd import numpy as np from pandas import DataFrame # data_file 数据文件路径 data_file = '/Users/qiguan/Downloads/data.xlsx' # 读取文件数据 data = pd.read_excel(data_file, index_col=None) # 首先将pandas读取的数据转化为array data_array = np.array(data) # 然后转化为list形式 data_list =data_array.tolist()

【Python】线性回归模型
type: item
date: 2021-09-27T11:00:00+08:00
description: 数据准备import numpy as np from sklearn import linear_model import matplotlib.pyplot as plt # 数据准备 x = np.array([1,3,2,1,3]) y = np.array([14,24,18,17,27]) regr = linear_model.LinearRegression() # 模型训练 regr.fit(x.reshape(-1,1),y)数据处理# 得到直线的斜率、截距、公式 y = a*x + b a,b = regr.coef_,regr.intercept_ print('a=',a,'b=',b) # 对回归模型打分 print('score=',regr.score(x.reshape(-1,1),y)) # 可视化模型 # 1.真实的点 plt.scatter(x,y,color='blue') # 2.拟合的直线 plt.plot(x,regr.predict(x.reshape(-1,1)),color='red',linewidth=4) plt.show() # 对数据进行预测 c = np.array([6]) print('y_pre=',regr.predict(c.reshape(-1,1)))多元线性回归from sklearn import datasets # 从scikit-learn导入数据集 load_data = datasets.load_boston() # 从数据集库加载波士顿数集 import numpy as np import pandas as pd from sklearn.model_selection import train_test_split #导入数据 data_x = load_data.data data_y = load_data.target x_train,x_verify,y_train,y_verify = train_test_split(data_x,data_y,train_size=0.8,test_size=0.2)# 建立线性回归模型及训练 lm = linear_model.LinearRegression() lm.fit(x_train,y_train) # 得到直线的斜率、截距、公式 y=a*x+b a,b = lm.coef_,lm.intercept_ print('a=',a,'\nb=',b) # 对回归模型进行检查，给实际观测点和回归方程的拟合程度打分 print('train_score=',lm.score(x_train,y_train)) # 对新输一局进行预测 predictions = lm.predict(x_verify) print('test_score=',lm.score(x_verify,y_verify))全连接神经网络回归from sklearn.neural_network import MLPRegressor from sklearn.preprocessing import StandardScaler from sklearn import datasets #从scikit-learn导入数据集 load_data = datasets.load_boston() # 从数据集库加载波士顿数据集 import numpy as np import pandas as pd from sklearn.model_selection import train_test_split #导入数据 data_x = load_data.data data_y = load_data.target scaler = StandardScaler() # 标准化转换 scaler.fit(data_x) # 训练标准化对象 data_x = scaler.transform(data_x) # 转换数据集 x_train,x_verify,y_train,y_verify=train_test_split(data_x,data_y,train_size=0.8,test_size=0.2) # 神经网络回归 clf = MLPRegressor(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=(5,2),random_state=1) clf.fit(x_train,y_train) # 查看训练模型得分 print('train_score=',clf.score(x_train,y_train)) # 模型预测 pred = clf…

【python】数据分析模型
type: item
date: 2021-09-09T15:23:00+08:00
description: 上课笔记导入数据from sklearn import svm import numpy as np import sklearn # 取数据集 from sklearn.datasets import load_iris # 读入数据文件 load_data = load_iris() # 导入数据和标签 data_X = load_data.data data_X = data_X[:100,:2] # 为了后面的可视化，简化特征 data_Y = load_data.target data_Y = data_Y[:100] print(data_Y)划分样本数据和标签，抽取训练集# 划分样本数据和标签 和 抽取训练集和测试集 train_data,test_data,train_label,test_label=sklearn.model_selection.train_test_split(data_X,data_Y,random_state=1,train_size=0.6,test_size=0.4) print(train_data.shape) print(test_data.shape)定义svm并训练# 定义svm并训练 classifier=svm.SVC(C=2,kernel='rbf',gamma=10,decision_function_shape='ovr') classifier.fit(train_data,train_label.ravel()) # 识别率 print('训练集：',classifier.score(train_data,train_label)) print('测试集：',classifier.score(test_data,test_label))绘制图形#绘制图形 # 确定坐标轴范围 import matplotlib import matplotlib.pyplot as plt x1_min, x1_max = data_X[:, 0].min(), data_X[:, 0].max() # 第0维特征的范围 x2_min, x2_max = data_X[:, 1].min(), data_X[:, 1].max() # 第1维特征的范围 x1, x2 = np.mgrid[x1_min:x1_max:200j, x2_min:x2_max:200j] # 生成网络采样点 grid_test = np.stack((x1.flat, x2.flat), axis=1) # 测试点 # 指定默认字体 matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 设置颜色 cm_light = matplotlib.colors.ListedColormap(['#A0FFA0', '#FFA0A0']) cm_dark = matplotlib.colors.ListedColormap(['g', 'r']) grid_hat = classifier.predict(grid_test) # 预测分类值 grid_hat = grid_hat.reshape(x1.shape) # 使之与输入的形状相同 plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light) # 预测值的显示 plt.scatter(data_X[:, 0], data_X[:, 1], c=data_Y, s=30, cmap=cm_dark) # 原样本 plt.scatter(test_data[:, 0], test_data[:, 1], c=test_label, s=30, edgecolors='k', zorder=2,cmap=cm_dark) # 圈中测试集样本点 plt.xlabel('花萼长度', fontsize=13) plt.ylabel('花萼宽度', fontsize=13) plt.xlim(x1_min, x1_max) plt.ylim(x2_min, x2_max) plt.title('鸢尾花SVM二特征分类') plt.show() print('ok')