个人学习_2021.8.10

基于https://www.bilibili.com/video/BV1CB4y1c7UQ?p=9&spm_id_from=pageDriver


#问题分类:回归(函数输出),分类,聚类(根据相似度划分成不同的群落),降维(降低数据复杂度)


#数据预处理:将字符串转为数值,将数据归一化(避免最后的过度拟合)
#1.标准化
#均值移除:一个样本的不同特征差异可能较大,不利于机器学习算法惊样本处理
#将样本化为均值为0,标准差为1的数据集
#均值为0算法:1.求平均值 2.每个分量减去平均值
#标准差为1算法:转为均值为0的数据集后,每个分量再除去标准差
#使用API:通过sklearn。preprocessing快速解决

#应用例子(用sp.scale()import numpy as np
import sklearn.preprocessing as sp

raw_samples=np.array([
    [17,90,4000],
    [20,80,5000],
    [23,75,6000]
])

result=sp.scale(raw_samples)
#.mean(axis=), .std(axis=)可以分别算出品均值与标准差
#print(result)
#范围缩放API  sp.MinMaxScaler(feature_range=(a,b))
#主义这是定义了一个转换的方法或者说函数,后面应该要输入内容


#print(raw_samples)
mms=sp.MinMaxScaler(feature_range=(0,1))
raw_samples=mms.fit_transform(raw_samples)
#print(raw_samples)
#print('----')
#可见是针对一列列的来缩放



#part_2 解线性函数
#用了 np.linalg.solve(a,b) 雷明那本书上有
# .T 可以直接得到矩阵的转置
raw_samples=np.array([
    [17,90,4000],
    [20,80,5000],
    [23,75,6000]
])

mms_samples=raw_samples.copy()

new_samples=[]
#这里是缩放
for row in mms_samples.T:
    min_val=row.min()
    max_val=row.max()
     #kx+b=0 or 1
    A=np.array([[min_val,1],[max_val,1]])
    B=np.array([0,1])
    x=np.linalg.solve(A,B)
    #x 两行一列
    #最后输出到屏幕上的应该是转置后的结果
    new_row=row*x[0]+x[1]
    new_samples.append(new_row)

#print(np.array(new_samples).T)

#part_3 归一化
# norm 范数
# l1 -l1范数:向量中元素的绝对值之和
# l2 -l2范数:向量中每个元素的平方和
#用 sp.normalize(matrix,norm='')

raw_samples=np.array([
    [17,90,4000],
    [20,80,5000],
    [23,75,6000]
])
#太难看了,转置效果好看点
result=sp.normalize(raw_samples.T, norm='l1')
#print(result)


#part4 二值化
#根据一个事先给定的阈值,用01表示特征值不高于或高于阈值。二值化后的数组中每个元素非01
#给出阈值, 获取二值化器
#bin = sp.Binarizer(threshold=阈值)
# 调用transform方法对原始样本矩阵进行二值化预处理操作
#result = bin.transform(原始样本矩阵)

raw_samples=np.array([
    [17,90,4000],
    [20,80,5000],
    [23,75,6000]
])
bin=sp.Binarizer(threshold=80)
result=bin.transform(raw_samples)
#print(result)

#part5 独热编码(one-hot encoding)
#编码原则:找出每一列的离散值,有几个就有几位编码,只有一位为1,其他为0
#比如,某一列有 135,则它们三个的one-hot encoding分别为100010001
#再如,某一列有14689.则分别为1000001000001000001000001
#方法:创建一个独热编码器
# sparse: 是否使用紧缩格式(稀疏矩阵),如果选用 sparse=True,会返回标记为的位置
# dtyle:  数据类型
#ohe = sp.OneHotEncoder(sparse=是否采用紧缩格式, dtype=数据类型)
# 对原始样本矩阵进行处理,返回独热编码后的样本矩阵。
#result = ohe.fit_transform(原始样本矩阵)
#

raw_samples=np.array([
    [1,9,4],
    [2,0,5],
    [2,7,6],
    [1,0,7]
])

ohe=sp.OneHotEncoder(sparse=False,dtype='int8')
result=ohe.fit_transform(raw_samples)
print(result)

#part5 标签编码
#就是把文字标签(字符串)转化为数字标签,
#实际上感觉和独热编码没差多少
#但是这个比较鶸,建议自己写一个类,

#方法:
# 获取标签编码器
#lbe = sp.LabelEncoder()
# 调用标签编码器的fit_transform方法训练并且为原始样本矩阵进行标签编码
#result = lbe.fit_transform(原始样本矩阵)
# 根据标签编码的结果矩阵反查字典 得到原始数据矩阵
#samples = lbe.inverse_transform(result)

raw_samples = np.array([
    'audi', 'ford', 'audi', 'toyota',
    'ford', 'bmw', 'toyota', 'ford',
    'audi'])
print(raw_samples)
lbe = sp.LabelEncoder()
lbe_samples = lbe.fit_transform(raw_samples)
print(lbe_samples)

lbe_samples=([2,1,2,2,3,0,0,1])
inv_samples = lbe.inverse_transform(lbe_samples)
print(inv_samples)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值