老高的苦难学习经历

Good good study, day day up!

文章

15

标签

0

评论

12

文章目录

数据统计

成立

195天

文章

15篇

评论

12条

标签

0个

最近文章

自己理解的所谓算法01

标准化(均值移除)

这玩应说人话就是 把大小不一的数,变成差不多统一标准的数.方便机械学习模型更好的理解.
多用于特征与特征之间差距过大。让每一列的平均值变为0,标准差小于1
公式没看懂,翻译成人话的大概意思就是

每个数-所有数据的平均数 再除以这些数的平均离差

举个例子吧
比如我有一个列表 [10,20,30]
先算平均值 (10+20+30)/3=20
每个数减去这个20,这玩应就叫 均值移除
移除完成之后再除以标准差

import sklearn.preprocessing as sp
import numpy as np
ary = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]])
scaler = sp.StandardScaler()
data_std = scaler.fit_transform(ary)
print("标准化结果:\n", data_std)

范围缩放

from sklearn.preprocessing import MinMaxScaler
import numpy as np
# 原始数据
data = np.array([[50], [100], [150]])
# 创建缩放器(默认缩放到0~1)
scaler = MinMaxScaler()
# 应用fit_transform:先学规则,再缩放
scaled_data = scaler.fit_transform(data)
print("范围缩放后的数据:\n", scaled_data)

[50,100,150]
最小数是:50
最大数是:150
差距:150 - 50 = 100

新数 = (当前数 - 最小数) ÷ (最大数 - 最小数)

然后每个数都用这个方法变:
50 ->(50 - 50) ÷ 100 = 0.0
100 -> (100 - 50) ÷ 100 = 0.5
150 -> (150 - 50) ÷ 100 = 1.0

[0.0, 0.5, 1.0]

这玩应就是把不一样大小的数都压到统一的一个范围 比如 0到1
算法就是 当前数减最小数,再除以最大和最小的差值

归一化

以行为单位。

from sklearn.preprocessing import Normalizer
import numpy as np
# 原始数据(每行是一个样本)
data = np.array([[3, 4],
                 [1, 2]])
# 创建归一化器(默认是L2范数,也就是“模长为1”)
normalizer = Normalizer()
# 执行归一化
normalized_data = normalizer.fit_transform(data)
print("归一化结果:\n", normalized_data)

还是举例子吧
[3000,6000,9000]
最小值 3000 最大值 9000
差距是 9000-3000=6000
然后
(3000-3000)÷6000=0
(6000-3000)÷6000=0.5
(9000-3000)÷6000=1.0

归一化:减最小,除差值,全体变成 0 到 1!
标准化:减平均,除波动,中心变成 0!

二值化

from sklearn.preprocessing import Binarizer
import numpy as np
# 原始数据
data = np.array([[1], [3], [5], [7]])
# 创建二值器,设置阈值为4
binarizer = Binarizer(threshold=4)
# 执行二值化
binary_data = binarizer.fit_transform(data)
print("二值化结果:\n", binary_data)

这个还挺好理解的,我好像上课就听懂这一个
就是把数字编程 0或1
假设
[3000,6000,9000]
设置但凡大于等于6000的标记成1 小于的标记成0
输出就是[0,1,1]

大概就是设置个门槛,大于等于的就是1,其他都0

独热编码

这块我真是一点没理解为啥这么干,AI解释的线帖一下吧。

📌 为啥叫“独热”?

•    “独”:每次只有一个位置是 1
•    “热”:那个位置“亮了” → 表示选中它!

就像考试选择题,A/B/C/D四个选项,每次只能选一个打钩,其它都是空的。

复习补充:
独热编码,实际上就是需要把一些分类用的文字 例: 男 女 红 蓝 等变成只包含0-1的数组,让AI看得懂,又不会误会大小关系.
如果把男变成1,女变成2,这样会出问题,因为模型会误以为 女>男?又大小顺序?这就误会了... 所以要用到独热编码,每一个分类 独立开
独占一列 每次只点亮对应的位置,其他都0 参数:sparse=是否稀疏矩阵

sparse=True -> 这样记录是一个元组(在第几列)
sparse=Flase -> 返回的是数组
dtype='默认是float64',可以设置成 int32 返回的是编码,如果想解码,就用对象.inverse_transform('fit_trasform返回的编码对象')
data = np.array([['北京'],['上海'],['广州'],['北京']])
scater = sp.OneHotEncoder(sparse_output=False)

scater_data = scater.fit_transform(data)
print(scater_data)
scater_data_decode = scater.inverse_transform(scater_data)
print(scater_data_decode)

注意:sparse好像在新版本中改名字叫 sparse_output 以下是源码中的原文
returns a sparse matrix or dense array (depending on the sparse_outputparameter).

标签编码

大概理解就是文字转编号
不管顺序,不管含义,编号只为了让机器能识别这些分类

要是高分类,数量不多->标签编码
避免模型误会大小关系->独热编码

解码用.inverse_transform()

补充

(下面用法都是面向对象)
再补充下----> 小写的是函数 大写的是面向对象,小写的快速处理数据,临时用的,大写的是先创建对象,可以反复使用,多轮次处理

标准化 StandardScaler()
范围缩放 MinMaxScaler()
归一话 Normalizer()
二值化 Binarizer()
都热编码 OneHotEncoder()
标签编码 LabelEncoder()

fit是学习规则(比如算均值、最大值)
transform应用规则,前提是调用过fit了。
fit_transform 一口气都干完了。

第一次数据处理 用fit_transdform ->学+用
以后再有新数据,直接用transform

下面是AI说的。

技术是啥操作适合什么时候用
标准化 StandardScaler减平均、除标准差数值分布不一致,模型对数值敏感(如逻辑回归、SVM、神经网络等)
范围缩放 MinMaxScaler缩放到 0~1 或指定范围图像像素、KNN、神经网络、任何对特征比例有要求的模型
二值化 Binarizer设门槛,大于等于=1,小于=0是否判断类问题、二分类、图像处理(亮/暗)、是否点击、是否下单等场景
独热编码 OneHotEncoder把分类变成多列的0/1表示类别字段如颜色、性别、城市等,不能用数字直接表示的分类变量

自己理解的所谓算法01

发布于

June 25, 2025

分类

所谓算法

版权协议

MIT

评论
😀

感谢支持!

微信二维码

请使用微信扫描二维码打赏。

支付宝二维码

请使用支付宝扫描二维码打赏。