wordpress手机端主题插件下载,泰安seo服务,php网站建设管理教材,中国机械加工网制造特征工程
特征工程:就是对特征进行相关的处理
一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程
特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。
特征工程API
实例化…特征工程
特征工程:就是对特征进行相关的处理
一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程
特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。
特征工程API
实例化转换器对象转换器类有很多都是Transformer的子类, 常用的子类有:
DictVectorizer 字典特征提取
CountVectorizer 文本特征提取
TfidfVectorizer TF-IDF文本特征词的重要程度特征提取
MinMaxScaler 归一化
StandardScaler 标准化
VarianceThreshold 底方差过滤降维
PCA 主成分分析降维
转换器对象调用fit_transform()进行转换, 其中fit用于计算数据transform进行最终转换
fit_transform()可以使用fit()和transform()代替
data_new transfer.fit_transform(data)
可写成
transfer.fit(data)
data_new transfer.transform(data)
DictVectorizer 字典列表特征提取
api 创建转换器对象: sklearn.feature_extraction.DictVectorizer(sparseTrue) 参数: sparseTrue返回类型为csr_matrix的稀疏矩阵 sparseFalse表示返回的是数组,数组可以调用.toarray()方法将稀疏矩阵转换为数组 转换器对象: 转换器对象调用fit_transform(data)函数参数data为一维字典数组或一维字典列表,返回转化后的矩阵或数组 转换器对象get_feature_names_out()方法获取特征名
示例1 提取为稀疏矩阵对应的数组 from sklearn.feature_extraction import DictVectorizer
import pandas as pd
data [{city:成都,age:30,temperature:200},{city:重庆,age:33, temperature:60}, {city:北京, age:42, temperature:80}]
transfer DictVectorizer(sparseFalse)
arr transfer.fit_transform(data)
feature transfer.get_feature_names_out()
ddata pd.DataFrame(arr,columnsfeature)
print(ddata) 示例2 提取为稀疏矩阵
from sklearn.feature_extraction import DictVectorizer
import pandas as pd
data [{city:成都,age:30,temperature:200},{city:重庆,age:33, temperature:60}, {city:北京, age:42, temperature:80}]
transfer DictVectorizer(sparseTrue)
arr transfer.fit_transform(data)
print(arr) 稀疏矩阵转为数组
稀疏矩阵对象调用toarray()函数, 得到类型为ndarray的二维稀疏矩阵
from sklearn.feature_extraction import DictVectorizer
import pandas as pd
data [{city:成都,age:30,temperature:200},{city:重庆,age:33, temperature:60}, {city:北京, age:42, temperature:80}]
transfer DictVectorizer(sparseTrue)
arr transfer.fit_transform(data)
print(arr)
arr1 arr.toarray()
print(arr1) CountVectorizer 文本特征提取
API
sklearn.feature_extraction.text.CountVectorizer
构造函数关键字参数stop_words值为list表示词的黑名单(不提取的词)
fit_transform函数的返回值为稀疏矩阵
英文文本提取
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
data [i love you,you like her,i like book]
# 创建转换器对象
transfer CountVectorizer(stop_words[])
# 提取得到稀疏矩阵
data1 transfer.fit_transform(data)
print(data1)
# data1转为对应的完整数组
data2 data1.toarray()
# 获取特征名称
feature transfer.get_feature_names_out()
# 创建DataFrame对象
arr pd.DataFrame(data2,columnsfeature)
print(arr) 中文文本提取
a.中文文本不像英文文本中文文本文字之间没有空格所以要先分词一般使用jieba分词.
b.下载jieba组件, (不要使用conda)
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import jieba
def cut(text):return .join(list(jieba.cut(text)))data [正义也许会迟到但永远不会缺席,迟到的正义还是正义吗,正义和邪恶究竟哪一方会缺席]
data1 [cut(i) for i in data]
print(data1)
transfer CountVectorizer(stop_words[还是])
re transfer.fit_transform(data1)
print(re)
feature transfer.get_feature_names_out()
arr re.toarray()
ddata pd.DataFrame(arr,columnsfeature)
ddata 数字代表这个词在句子中出现的频次在代码中“还是”被作为了黑名单词并不会进行划分
TfidfVectorizer TF-IDF文本特征词的重要程度特征提取
API
sklearn.feature_extraction.text.TfidfVectorizer()
构造函数关键字参数stop_words表示词特征黑名单
fit_transform函数的返回值为稀疏矩阵
示例
代码与CountVectorizer的示例基本相同,仅仅把CountVectorizer改为TfidfVectorizer即可
示例中data是一个字符串list, list中的第一个元素就代表一篇文章.
from sklearn.feature_extraction.text import TfidfVectorizer,CountVectorizer
import pandas as pd
import jieba
data [正义也许会迟到但永远不会缺席,迟到的正义还是正义吗,正义和邪恶究竟哪一方会缺席]
def cut(text):return .join(jieba.cut(text))
data1 [cut(i) for i in data]
transfer1 TfidfVectorizer(stop_words[])
transfer2 CountVectorizer(stop_words[])
data01 transfer1.fit_transform(data1)
data02 transfer2.fit_transform(data1)
# 转换成完整矩阵
arr1 data01.toarray()
arr2 data02.toarray()
# 获取特征名称
feature1 transfer1.get_feature_names_out()
feature2 transfer2.get_feature_names_out()
# 创建DataFrame对象
Data1 pd.DataFrame(arr1,columnsfeature1)
Data2 pd.DataFrame(arr2,columnsfeature2)
Data1
Data2 无量纲化-预处理
无量纲即没有单位的数据
无量纲化包括归一化和标准化, 为什么要进行无量纲化呢?
(1) MinMaxScaler 归一化
通过对原始数据进行变换把数据映射到指定区间(默认为0-1)
1归一化公式: 这里的 min 和 max 分别是每种特征中的最小值和最大值而 是当前特征值scaled 是归一化后的特征值。
若要缩放到其他区间可以使用公式xx*(max-min)min;
2归一化API
sklearn.preprocessing.MinMaxScaler(feature_range)
参数:feature_range(0,1) 归一化后的值域,可以自己设定
fit_transform函数归一化的原始数据类型可以是list、DataFrame和ndarray, 不可以是稀疏矩阵
fit_transform函数的返回值为ndarray
3归一化示例
from sklearn.preprocessing import MinMaxScaler
data [[19,12,15],[23,15,25],[25,18,20]]
# 定义转换后的值域
transfer MinMaxScaler(feature_range(0,1))
# 转换
data1 transfer.fit_transform(data)
print(data1) 4缺点
最大值和最小值容易受到异常点影响所以鲁棒性较差。所以常使用标准化的无量钢化
(2)StandardScaler 标准化
1标准化公式
最常见的标准化方法是Z-score标准化也称为零均值标准化。它通过对每个特征的值减去其均值再除以其标准差将数据转换为均值为0标准差为1的分布。这可以通过以下公式计算: 其中z是转换后的数值x是原始数据的值μ是该特征的均值σ是该特征的标准差
2 标准化 API
sklearn.preprocessing.StandardScale
与MinMaxScaler一样原始数据类型可以是list、DataFrame和ndarray
fit_transform函数的返回值为ndarray, 归一化后得到的数据类型都是ndarray
from sklearn.preprocessing import StandardScaler
data [[19,12,15],[23,15,25],[25,18,20]]
transfer StandardScaler()
data1 transfer.fit_transform(data)
print(data1) 3标准化示例
from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
# 获取数据
data pd.read_csv(./src/dating.txt)
print(type(data)) # class pandas.core.frame.DataFrame
print(data.shape) # (1000, 4)
# 实例化一个转换器
transfer StandardScaler()
# 调用fit_transform
data1 transfer.fit_transform(data) # 把DataFrame数据进行标准化
print(data1[0:5])
data2 data.values # 把DateFrame转为ndarray
data3 transfer.fit_transform(data2) # 把ndarray数据进行标准化
print(data3[0:5])
data4 data.values.tolist() # 把DateFrame转为list
data5 transfer.fit_transform(data4) #把list数据进行标准化
print(data5[0:5])
特征降维
实际数据中,有时候特征很多,会增加计算量,降维就是去掉一些特征,或者转化多个特征为少量个特征
特征降维其目的:是减少数据集的维度同时尽可能保留数据的重要信息。
特征选择
(a) VarianceThreshold 低方差过滤特征选择 Filter(过滤式): 主要探究特征本身特点 特征与特征、特征与目标 值之间关联 方差选择法: 低方差特征过滤 如果一个特征的方差很小说明这个特征的值在样本中几乎相同或变化不大包含的信息量很少模型很难通过该特征区分不同的对象,比如区分甜瓜子和咸瓜子还是蒜香瓜子,如果有一个特征是长度,这个特征相差不大可以去掉。 过滤特征移除所有方差低于设定阈值的特征 设定阈值选择一个方差阈值任何低于这个阈值的特征都将被视为低方差特征。 计算方差对于每个特征计算其在训练集中的方差(每个样本值与均值之差的平方,在求平均)。
from sklearn.feature_selection import VarianceThreshold
import pandas as pd
def variance_demo():# 1、获取数据,data是一个DataFrame,可以是读取的csv文件datapd.DataFrame([[10,1,2],[11,3,3],[11,1,5],[11,5,7],[11,9,12],[11,3,14],[11,2,12],[11,6,9]])print(data)# 实例化一个转换器transfer VarianceThreshold(threshold1)# 调用fit_transformdata1 transfer.fit_transform(data)print(data1:\n,data1)return None
variance_demo() (b) 根据相关系数的特征选择
1理论
正相关性Positive Correlation是指两个变量之间的一种统计关系其中一个变量的增加通常伴随着另一个变量的增加反之亦然。在正相关的关系中两个变量的变化趋势是同向的。当我们说两个变量正相关时意味着 如果第一个变量增加第二个变量也有很大的概率会增加。 同样如果第一个变量减少第二个变量也很可能会减少。
2api:
scipy.stats.personr(x, y) 计算两特征之间的相关性
返回对象有两个属性:
statistic皮尔逊相关系数[-1,1]
pvalue零假设(了解),统计上评估两个变量之间的相关性,越小越相关
3示例
from scipy.stats import pearsonr
import pandas as pd
def pear():# 获取数据data pd.DataFrame([[1,2,3],[2,4,5],[3,5,4],[4,6,2],[5,8,5],[6,8,4]],columns[1,2,3])print(data)# 计算某两个变量之间的相关系数r1 pearsonr(data[1],data[2])print(r1.statistic,r1.pvalue)
pear() 2.主成份分析(PCA)
PCA的核心目标是从原始特征空间中找到一个新的坐标系统使得数据在新坐标轴上的投影能够最大程度地保留数据的方差同时减少数据的维度。
原理将不同特征看作向量投射到一条新向量上。达到降维的目的 投影到L上的值就是降维后保留的信息投影到与L垂直的轴上的值就是丢失的信息。保留信息/丢失信息信息保留的比例
api from sklearn.decomposition import PCA PCA(n_componentsNone) 主成分分析 n_components: 实参为整数时表示减少到多少特征 实参为小数时表示降维后保留百分之多少的信息
n_components为小数例0.8表示保留80%的特征信息来进行降维
n_components为整数例3表示最后结果只保留下3个特征来进行降维
示例
from sklearn.decomposition import PCA
data [[2,8,4,5], [6,3,0,8], [5,4,9,1]]
# 实例化转换器
transfer PCA(n_components0.8)
# 调用fit_transform
arr transfer.fit_transform(data)
print(arr:\n,arr) 将4维特征降为了2维特征。