目录
1、包含内容
数值型数据的无量纲化
- 归一化
- 标准化
2、特征预处理API
sklearn.preprocessing
为什么我们要进行归一化 / 标准化?
- 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其他的特征。
3、归一化
3.1 定义
通过对原始数据进行变换把数据映射到(默认为[0,1])之间
3.2 公式
3.3 API
sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
- MinMaxScalar.fit_transform(X)
- X:numpy array格式的数据 [n_samples,n_features]
- 返回值:转换后的形状相同的array
import pandas as pd
def minmax_demo():
# 归一化
# 1、获取数据
data = pd.read_csv("dating.txt")
# 前三列数据
data = data.iloc[:,:3]
print(data)
# 2、实例化一个转换器
transfer = MinMaxScaler()
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new)
return None
if __name__ == '__main__':
minmax_demo()
3.4 归一化总结
注意如果最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,
所以这种方法鲁棒性(稳定性)较差,只适合传统精确小数据场景。
4、标准化
4.1 定义
通过对原始数据进行变换到均值为0,标准差为1的范围内
4.2 公式
4.3 API
sklearn.preprocessing.StandardScaler()
- 处理之后,对每列来说,所有数据都聚集在均值为0附近,标准差为1
- StandardScaler.fit_transform(X)
- X:numpy array格式的数据(n_samples,n_features)
- 返回值:转换后的形状相同的array
def stand_demo():
# 标准化
# 1、获取数据
data = pd.read_csv("dating.txt")
# 前三列数据
data = data.iloc[:,:3]
print(data)
# 2、实例化一个转换器
transfer = StandardScaler()
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new)
return None
if __name__ == '__main__':
stand_demo()
4.4 标准化总结
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据前景
5、代码总结
from sklearn.datasets import load_iris
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
from sklearn.model_selection import train_test_split
import jieba
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler
def datasets_demo():
# 获取数据集
iris = load_iris()
print("鸢尾花数据集:\n",iris)
print("查看数据集描述:\n",iris["DESCR"])
print("查看特征值的名字:\n",iris.feature_names)
print("查看特征值:\n",iris.data,iris.data.shape)
# 数据集划分
# random_state=22 随机种子,因为随机种子是固定的,所以每次运行程序时都会得到相同的训练集和测试集
# 这对于代码的可重复性和调试非常有用
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
print("训练集的特征值:\n",x_train,x_train.shape)
return None
def dict_demo():
# 字典特征抽取 DictVectorizer
data=[{'city':'背景','temperature':100},{'city':'shan','temperature':200}]
# 1、实例化一个转换器
transfer = DictVectorizer(sparse=False)
# 2、调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)
return None
def count_demo():
# 文本特征提取
data = ["life is short,i like python","life is too long,i dislike python"]
# 1、实例化一个转换器类
transfer = CountVectorizer()
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n",transfer.get_feature_names_out())
return None
def count_chinese_demo():
# 中文文本特征提取
data = ["呜呜 呜呜 等等 是 否 分析","等等 实时 还"]
# 1、实例化一个转换器类
transfer = CountVectorizer()
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n",transfer.get_feature_names_out())
return None
def cut_word(text):
# 进行中文分词
return " ".join(list(jieba.cut(text)))
def count_chinese_demo2():
# 中文文本特征抽取 自动分词
data =["少时诵诗书所所所所丰富创新型",
"伺服电机寻或错过过过过过过过过过",
"爱何辜大V阿深V次氯酸钠计算出吧看啥迟迟不你"]
# 将中文文本进行分离
data_new=[]
for sent in data:
data_new.append(cut_word(sent) )
# 1、实例化一个转换器类
transfer = CountVectorizer()
# 2、调用fit_transform
data_final= transfer.fit_transform(data_new)
print("data_new:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names_out())
return None
def tfidf_demo2():
# 中文文本特征抽取 自动分词
data =["少时诵诗书所所所所丰富创新型",
"伺服电机寻或错过过过过过过过过过",
"爱何辜大V阿深V次氯酸钠计算出吧看啥迟迟不你"]
# 将中文文本进行分离
data_new=[]
for sent in data:
data_new.append(cut_word(sent) )
# 1、实例化一个转换器类
transfer = TfidfVectorizer()
# 2、调用fit_transform
data_final= transfer.fit_transform(data_new)
print("data_new:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names_out())
return None
def minmax_demo():
# 归一化
# 1、获取数据
data = pd.read_csv("dating.txt")
# 前三列数据
data = data.iloc[:,:3]
print(data)
# 2、实例化一个转换器
transfer = MinMaxScaler()
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new)
return None
def stand_demo():
# 标准化
# 1、获取数据
data = pd.read_csv("dating.txt")
# 前三列数据
data = data.iloc[:,:3]
print(data)
# 2、实例化一个转换器
transfer = StandardScaler()
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new)
return None
if __name__ == '__main__':
# datasets_demo()
# dict_demo()
# count_demo()
# count_chinese_demo()
# count_chinese_demo2()
# cut_word("我爱北京天安门")
# tfidf_demo2()
# minmax_demo()
stand_demo()