【机器学习】机器学习学习笔记 - 数据预处理 - 01

devtools/2024/10/18 22:34:13/

machine learning

  • 监督学习: 是指在有标记的样本(labeled samples)上建立机器学习的模型
  • 无监督学习: 是指在没有标记的样本上建立机器学习的模型
  • semi-supervised learning: 是指在部分标记样本上建立机器学习的模型
  • 强化学习: 是指在与环境交互的过程中,根据环境反馈来调整策略,以达到目标
  • 强化学习算法: 是指在与环境交互的过程中,根据环境反馈来调整策略,以达到目标的算法

pdf在线免费转word文档 https://orcc.online/pdf

数据预处理

  • 行: 样本; 列:特征

均值移除(标准化)

  • 均值移除(标准化): 平均值调整为 0, 标准差调整为 1
  • 由于一个样本的不同特征值差异较大,不利于使用现有机器学习算法进行样本处理
代码
# -*- coding: UTF-8 -*-import numpy as np
from sklearn import preprocessing# 导入数据
data = np.array([[3,-1.5,2,-5.4],[0,4,-0.3,2.1],[1,3.3,-1.9,-4.3]])
print("data:\n", data)# 数据预处理
data_standardized = preprocessing.scale(data)
print("preprocessing.scale:\n", data_standardized)
# 特征值的平均值, 几乎为0
print("Mean =", data_standardized.mean(axis=0))
# 标准差,都为1
print("Std deviation =", data_standardized.std(axis=0))
算法
均值为 0
a=17
b=20
c=23
# 计算均值
mean=(a+b+c)/3
# 例如有一列特征值表示年龄:[17,20,23]
mean=(17+20+23)/3=20
a1=17-20=-3
b1=20-20=0
c1=23-20=3
# 均值为0
方差为 1
a1=-3
b1=0
c1=3
s=std(a1,b1,c1)
result = [a1/s,b1/s,c1/s]

范围缩放

  • 数据点中每个特征的数值范围可能变化很大,因此,有时将特征的数值范围缩放到合理的大小是非常重要的
  • 特征缩放: 特征值缩放到 0~1 之间
代码
data_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
data_scaled = data_scaler.fit_transform(data)
print("Min max scaled data =", data_scaled)

归一化

  • 归一化: 特征值缩放到 0~1 之间
  • 数据归一化用于需要对特征向量的值进行调整时,以保证每个特征向量的值都缩放到相同的数值范围。机器学习中最常用的归一化形式就是将特征向量调整为 L1 范数,使特征向量的数值之和为 1
  • 这个方法经常用于确保数据点没有因为特征的基本性质而产生较大差异,即确保数据处于同一数量级,提高不同特征数据的可比性
代码
data_scaler = preprocessing.normalizer(norm='l1').fit(data)
data_normalized = data_scaler.transform(data)
print("Normalized data =", data_normalized)

二值化

  • 二值化用于将数值特征向量转换为布尔类型向量
代码
data_binarized = preprocessing.Binarizer(threshold=1.4).transform(data)
print("Binarized data:\n", data_binarized)

独热编码

  • 独热编码是一种将离散型特征转换为二值型特征的技术,它将每个离散型特征的值转换为一个二值特征,并将其值设为 1,其他值设为 0
代码
encoder = preprocessing.OneHotEncoder()
encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print("Encoded vector =", encoded_vector)

标记编码

  • 标记编码: 给定一个类别,将其转换为一个整数
  • 标记编码的优点: 编码后的数据更加易于理解和处理
  • 标记编码的缺点: 编码后的数据不易于理解和处理
from sklearn import preprocessing# 标记编码器
print("#"*10,"标记编码器", "#"*10)
label_encoder = preprocessing.LabelEncoder()
# 创建标记
input_classes = ['audi', 'ford', 'audi', 'toyota', 'ford', 'bmw']
# 标记编码
label_encoder.fit(input_classes)for i, item in enumerate(label_encoder.classes_):print(item, "\t=>\t", i)print("#"*10,"标记转数字", "#"*10)
labels = ['toyota', 'ford', 'audi']
encoded_labels = label_encoder.transform(labels)
print("Labels =", labels)
print("Encoded labels =", list(encoded_labels))

划分训练集与测试集

# 方法一,直接用包划分
from sklearn.model_selection import train_test_split# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)# 方法二,手工划分
# 划分训练集与测试集
X_train, X_test, y_train, y_test = X[0:100], X[100:], y[0:100], y[100:]# 取80%的样本作为训练数据
num_training = int(0.8 * len(X))
num_test = len(X) - num_training# 训练数据 80% reshape:(行数,列数)
# 行数:样本数
# 列数:特征数
X_train = np.array(X[:num_training]).reshape((num_training,1))
y_train = np.array(y[:num_training])# 测试数据 20%
X_test = np.array(X[num_training:]).reshape((num_test,1))
y_test = np.array(y[num_training:])

IT免费在线工具网 https://orcc.online


http://www.ppmy.cn/devtools/4672.html

相关文章

推荐算法之协同过滤

算法原理 透过百科,我们了解到协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤算法结合用户行为分析用户…

SnapGene Mac激活版 分子生物学软件

SnapGene Mac是一款功能全面、操作便捷的综合性分子生物学软件,专为Mac用户打造。它集成了DNA序列编辑、分析、可视化和团队协作等多种功能,为科研人员提供了一个高效、可靠的分子生物学研究工具。 SnapGene Mac激活版下载 在SnapGene Mac中,…

Ubuntu 部署ChatGLM3大语言模型

Ubuntu 部署ChatGLM3大语言模型 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。 源码:https://github.com/THUDM/ChatGLM3 部署步骤 1.服务器配置 Ubuntu 20.04 8核(vCPU) 32GiB 5Mbps GPU NVIDIA T4 16GB 硬盘 100GiB CUDA 版本 12.2.2/…

椭圆曲线密码学(ECC)基本介绍和总结

背景 ECC英文全称"Elliptic Curve Cryptography",其背后的密码学原理或者说安全性,是基于椭圆曲线离散对数问题(Elliptic Curve Discrete Logarithm Problem,ECDLP)。ECC密码学被普遍认为是RSA密码系统的接…

关于java数据样品以及转换

关于集合 List<String> List<String> list duoMapper.selectName(); [ "alice1", "alice2", "alice3", "alice4", "alice5", "alice6", "alice7", "alice8",…

如何将三方库集成到hap包中——通过IDE集成cmak构建方式的C/C++三方库

简介 cmake构建方式是开源三方库的主流构建方式。DevEco Studio目前以支持cmake的构建方式。本文将通过在IDE上适配cJSON三方库为例讲来解如何在IDE上集成cmake构建方式得三方库。 创建工程 在开发进行三方库适配以及napi接口开发前&#xff0c;我们需要创建一个三方库对应的…

MySQL 开源到商业(一):Sun 公司收购了 MySQL AB

2008 年 1 月 27 日&#xff0c;开源数据库 MySQL 之父 Monty 在博客上高调宣布 Sun 公司收购了 MySQL AB。在这篇博客里面 Monty 分享了对于开源项目出路的思考&#xff0c;以及作为一个开源骇客对大公司收购的看法。目前国内开源项目正在爆发&#xff0c;而对开源的思考也在逐…

利用vue3SeamlessScroll 简单实现列表的无限循环滚动

Vue3SeamlessScroll 该组件用于实现列表的无限循环滚动 1、安装 npm i vue3-seamless-scroll 2、导入及基本使用 <!--组件.vue--> <script setup>import { Vue3SeamlessScroll } from vue3-seamless-scroll;import {ref} from vue//vue3导入组件是不需要用com…