目录
1.什么是特征工程
2.基本预处理:缺失值处理
2.1缺失值的处理
2.2小练习
2数值型特征
2.1对数变换
2.2幅度缩放
2.3统计数值:描述统计分析
2.4高次特征与交叉特征
2.4.1高次特征
3.字符型特征
3.1哑变量
3.2标签编码
1.什么是特征工程
特征是用于描述数据中的各种属性、变量或维度的信息,它们是模型用来做
出预测或分类的输入。特征工程是使用专业背景知识和技巧处理数据,使得特征能
在机器学习算法上发挥更好的作用的过程。良好的特征工程可以显著提高模型的性
能,而糟糕的特征选择或构建可能导致模型性能下降。
- 意义:会直接影响机器学习的效果
特征工程的主要目标包括:
- 特征选择:选择最相关的特征,以减少维度和噪声,提高模型的泛化能力。这可以通过统计方法、领域知识、特征重要性评估等方式来完成。
- 特征构建:创建新的特征,以提供更多的信息或改善模型的性能。这可能包括将原始特征组合、进行数学变换、提取时间序列特征等操作。
- 特征缩放:确保特征具有相似的尺度,以避免某些特征对模型的权重产生不适当的影响。常见的缩放方法包括标准化和归一化。
- 处理缺失数据:处理缺失值,可以使用插补方法来填充缺失值,或者考虑是否删除包含缺失值的样本。
- 处理分类特征:将分类特征进行编码,例如独热编码(One-Hot Encoding)或标签编码(Label Encoding),以使其适用于机器学习模型。
- 特征交叉:将不同特征之间的关联性考虑在内,通过创建特征交叉来提供更多信息。
- 特征选择和降维:使用降维技术(如主成分分析PCA)来减少特征的数量,以提高模型的效率和可解释性。
2.基本预处理:缺失值处理
- 删除属性或者删除样本:如果大部分样本该属性都缺失,这个属性能提供的信息有限,可以选择放弃使用该维属性
- 统计填充:对于缺失值的属性,尤其是数值类型的属性,根据所有样本关于这维属性的统计值对其进行填充,如使用平均数、中位数、众数、最大值、最小值等,具体选择哪种统计值需要具体问题具体分析。
- 统一填充:常用的统一填充值有:“空”、“0”、“正无穷”、“负无穷”等。
- 预测/模型填充:可以通过预测模型利用不存在缺失值的属性来预测缺失值,也就是先用预测模型把数据填充后再做进一步的工作,如统计、学习等。虽然这种方法比较复杂,但是最后得到的结果比较好。
- pandas库: fillna
- sklearn库: Imputer
2.1缺失值的处理
缺失值处理,以Age年龄为例
- 删除属性或者删除样本
- 统计补充
- 统一补充
- 模型预测补充
示例:用特征工程处理泰坦尼克号的预数据
import pandas as pd
data = pd.read_csv(r'train.csv')
print(data)
"""
PassengerId:乘客ID
Survived:生存情况,1为存活,0为死亡
Pclass:客舱等级,1为高级,2为中级,3为低级
Name:乘客名字
Sex:乘客性别
Age:乘客年龄
SibSp:在船兄弟姐妹数/配偶数
Parch:在船父母数/子女数
Ticket:船票编号
Fare:船票价格
Cabin:客舱号
Embarked:登船港口
"""
print('*'*40)
print('data原始信息:')
data.info()
print('*'*40)
# 处理年龄缺失值,Age平均值填充
# data['Age'] = data['Age'].fillna(value=data['Age'].mean())
# print('Age填充平均值后:')
# data.info()
# print('*'*40)
# 或者
from sklearn.impute import SimpleImputer
# 机器学习方法填充
imp = SimpleImputer(strategy='mean')
data[['Age']] = imp.fit_transform(data[['Age']].values)
print('Age填充平均值后:')
data.info()
print('*'*40)
运行结果:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
.. ... ... ... ... ... ... ...
886 887 0 2 ... 13.0000 NaN S
887 888 1 1 ... 30.0000 B42 S
888 889 0 3 ... 23.4500 NaN S
889 890 1 1 ... 30.0000 C148 C
890 891 0 3 ... 7.7500 NaN Q
[891 rows x 12 columns]
****************************************
data原始信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
****************************************
Age填充平均值后:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 891 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
****************************************
2.2小练习
对于常用的缺失值字段,填充的方式都有哪些?多选
A删除属性或者删除样本
B统计(均值、中位数、众数)填充
C正负无穷和0
D模型进行预测
ABCD
2数值型特征
数值型的幅度变换:
- log变换、多项式变换
- 幅度缩放(数据预处理):MinMaxScaler、StandardScaler
- 统计数值:Max、Min、AVG...
- 四则运算:+ - * /
2.1对数变换
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', None) #显示完整的列
data = pd.read_csv(r'train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)
# 对数变换
data['log_age'] = data['Age'].apply(lambda x:np.log(x))
print(data.head())
运行结果:
data原始前10行数据:
PassengerId Survived Pclass \
0 1 0 3
1 2 1 1
2 3 1 3
3 4 1 1
4 5 0 3
5 6 0 3
6 7 0 1
7 8 0 3
8 9 1 3
9 10 1 2
Name Sex Age SibSp \
0 Braund, Mr. Owen Harris male 22.0 1
1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1
2 Heikkinen, Miss. Laina female 26.0 0
3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1
4 Allen, Mr. William Henry male 35.0 0
5 Moran, Mr. James male NaN 0
6 McCarthy, Mr. Timothy J male 54.0 0
7 Palsson, Master. Gosta Leonard male 2.0 3
8 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0
9 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1
Parch Ticket Fare Cabin Embarked
0 0 A/5 21171 7.2500 NaN S
1 0 PC 17599 71.2833 C85 C
2 0 STON/O2. 3101282 7.9250 NaN S
3 0 113803 53.1000 C123 S
4 0 373450 8.0500 NaN S
5 0 330877 8.4583 NaN Q
6 0 17463 51.8625 E46 S
7 1 349909 21.0750 NaN S
8 2 347742 11.1333 NaN S
9 0 237736 30.0708 NaN C
****************************************
log_age为对数变换后新列:
PassengerId Survived Pclass \
0 1 0 3
1 2 1 1
2 3 1 3
3 4 1 1
4 5 0 3
5 6 0 3
6 7 0 1
7 8 0 3
8 9 1 3
9 10 1 2
Name Sex Age \
0 Braund, Mr. Owen Harris male 22.000000
1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.000000
2 Heikkinen, Miss. Laina female 26.000000
3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.000000
4 Allen, Mr. William Henry male 35.000000
5 Moran, Mr. James male 29.699118
6 McCarthy, Mr. Timothy J male 54.000000
7 Palsson, Master. Gosta Leonard male 2.000000
8 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.000000
9 Nasser, Mrs. Nicholas (Adele Achem) female 14.000000
SibSp Parch Ticket Fare Cabin Embarked log_age
0 1 0 A/5 21171 7.2500 NaN S 3.091042
1 1 0 PC 17599 71.2833 C85 C 3.637586
2 0 0 STON/O2. 3101282 7.9250 NaN S 3.258097
3 1 0 113803 53.1000 C123 S 3.555348
4 0 0 373450 8.0500 NaN S 3.555348
5 0 0 330877 8.4583 NaN Q 3.391117
6 0 0 17463 51.8625 E46 S 3.988984
7 3 1 349909 21.0750 NaN S 0.693147
8 0 2 347742 11.1333 NaN S 3.295837
9 1 0 237736 30.0708 NaN C 2.639057
2.2幅度缩放
1)MinMaxScaler()最大最小化处理,将数据缩放到[0, 1]的范围内
import pandas as pd
# pd.set_option('display.max_columns', None) #显示完整的列
data = pd.read_csv(r'train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)
#将Fare列最大最小归一化
from sklearn.preprocessing import MinMaxScaler
# 实例化最大最小值归一化类
mm_scaler = MinMaxScaler()
# 将数据缩放到[0, 1]的范围内
fare_trans = mm_scaler.fit_transform(data[['Fare']])
print('将数据缩放到[0, 1]的范围内:')
print(fare_trans)
运行结果:
data原始前10行数据:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
5 6 0 3 ... 8.4583 NaN Q
6 7 0 1 ... 51.8625 E46 S
7 8 0 3 ... 21.0750 NaN S
8 9 1 3 ... 11.1333 NaN S
9 10 1 2 ... 30.0708 NaN C
[10 rows x 12 columns]
****************************************
将数据缩放到[0, 1]的范围内:
[[0.01415106]
[0.13913574]
[0.01546857]
[0.1036443 ]
[0.01571255]
[0.0165095 ]
[0.10122886]
[0.04113566]
[0.02173075]
[0.05869429]
[0.03259623]
[0.05182215]
[0.01571255]
[0.06104473]
[0.01533038]
[0.03122992]
[0.05684821]
[0.02537431]
[0.03513366]
[0.01410226]
[0.05074862]
[0.02537431]
[0.01567195]
[0.06929139]
[0.04113566]
[0.06126432]
[0.01410226]
[0.51334181]
[0.01537917]
[0.01541158]
[0.0541074 ]
[0.28598956]
[0.01512699]
[0.02049464]
[0.16038672]
[0.10149724]
[0.01411046]
[0.01571255]
[0.03513366]
.......
[0.02049464]
[0.01376068]
[0.05684821]
[0.02537431]
[0.0585561 ]
[0.04577135]
[0.0585561 ]
[0.01512699]]
2)标准化处理
sklearn.preprocessing中的StandardScaler是用于标准化数据的类,它可以移除数据的均值和方差,使数据符合标准正态分布,即均值为0,方差为1
标准化转换的公式是:X_std = (X - X.mean()) / X.std(),其中X是原始数据,X_std是转换后的数据。
标准化的作用包括:
- 不同特征量级不同,标准化可以把所有特征变换到同一量级下
- 许多算法需要标准正态分布的数据,这时标准化是必要的预处理步骤
标准化不会改变数据分布的形状,这与归一化(MinMaxScaler)不同。
所以,如果数据本身符合正态分布,使用StandardScaler进行标准化,如果数据分布不均匀,使用MinMaxScaler归一化,使之在[0,1]区间。
import pandas as pd
# pd.set_option('display.max_columns', None) #显示完整的列
data = pd.read_csv(r'C:\Users\Administrator\Desktop\好课优选python\数据分析班_兮云\数据分析15期\17-特征工程\train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)
# 标准化处理
from sklearn.preprocessing import StandardScaler
#将fare列标准化
fare_std = StandardScaler()
# fit_transform方法:
# fit:计算数据的均值和方差,获得数据的转换参数。
# transform:使用fit获得的参数对数据进行标准化转换。
fare_std_trans = fare_std.fit_transform(data[['Fare']])
print('Fare列标准化后的数据:')
print(fare_std_trans)
运行结果:
data原始前10行数据:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
5 6 0 3 ... 8.4583 NaN Q
6 7 0 1 ... 51.8625 E46 S
7 8 0 3 ... 21.0750 NaN S
8 9 1 3 ... 11.1333 NaN S
9 10 1 2 ... 30.0708 NaN C
[10 rows x 12 columns]
****************************************
Fare列标准化后的数据:
[[-5.02445171e-01]
[ 7.86845294e-01]
[-4.88854258e-01]
[ 4.20730236e-01]
[-4.86337422e-01]
......
[-3.86670720e-01]
[-4.43810379e-02]
[-1.76263239e-01]
[-4.43810379e-02]
[-4.92377828e-01]]
2.3统计数值:描述统计分析
import pandas as pd
# pd.set_option('display.max_columns', None) #显示完整的列
data = pd.read_csv(r'train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)
# 最大最小值,在电商里经常用到
max_age = data['Age'].max( )
print('age列最大值:')
print(max_age)
print('*'*40)
min_age = data['Age'].min()
print('age列最小值:')
print(min_age)
print('*'*40)
# 分位数
# 1/4分位数
print('age 1/4分位数:')
age_quarter_1 = data['Age'].quantile(0.25)
print(age_quarter_1)
print('*'*40)
# 3/4分位数
print('age 3/4分位数:')
age_quarter_3 = data['Age'].quantile(0.75)
print(age_quarter_3)
运行结果:
data原始前10行数据:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
5 6 0 3 ... 8.4583 NaN Q
6 7 0 1 ... 51.8625 E46 S
7 8 0 3 ... 21.0750 NaN S
8 9 1 3 ... 11.1333 NaN S
9 10 1 2 ... 30.0708 NaN C
[10 rows x 12 columns]
****************************************
age列最大值:
80.0
****************************************
age列最小值:
0.42
****************************************
age 1/4分位数:
20.125
****************************************
age 3/4分位数:
38.0
课堂练习
对于数值的幅度变换,以下哪些不是()
A log对数
B 多项式变换
C 最大最小归一化
D 独热编码/哑变量
D是对字符类型的数据处理
计算家庭总人数
import pandas as pd
# pd.set_option('display.max_columns', None) #显示完整的列
data = pd.read_csv(r'C:\Users\Administrator\Desktop\好课优选python\数据分析班_兮云\数据分析15期\17-特征工程\train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)
# 计算家庭总人数
# SibSp:在船兄弟姐妹数/配偶数
# Parch:在船父母数/子女数
data.loc[:,'family_size'] = data['SibSp']+data['Parch' ]+1
print('family_size为家庭总人数:')
print(data.head())
运行结果:
data原始前10行数据:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
5 6 0 3 ... 8.4583 NaN Q
6 7 0 1 ... 51.8625 E46 S
7 8 0 3 ... 21.0750 NaN S
8 9 1 3 ... 11.1333 NaN S
9 10 1 2 ... 30.0708 NaN C
[10 rows x 12 columns]
****************************************
family_size为家庭总人数:
PassengerId Survived Pclass ... Cabin Embarked family_size
0 1 0 3 ... NaN S 2
1 2 1 1 ... C85 C 2
2 3 1 3 ... NaN S 1
3 4 1 1 ... C123 S 2
4 5 0 3 ... NaN S 1
2.4高次特征与交叉特征
preprocessing.PolynomialFeatures
是什么:
PolynomialFeatures变换用于在机器学习中创建多项式特征,它的主要目的是扩展特征空间,使模型能够更好地拟合非线性关系。这种变换通常用于线性回归、逻辑回归、支持向量机(SVM)等模型,特别是当原始特征与目标之间存在复杂的非线性关系时,多项式特征变换可以提高模型的性能。
怎么用:
对于给定的输入特征,例如一个特征向量[x1, x2,x3],PolynomialFeatures将其转换为多项式的形式,包括原始特征的各种幂和交叉项。例如,对于二次多项式,它会生成[x1,x2, x3, x1^2, x2^2, x3^2, x1x2, x1x3, x2x3]。
什么时候用:
1.非线性关系: 当你有理由相信目标变量与特征之间存在非线性关系时,多项式特征变换可以用来更好地捕捉这些非线性关系。
2.特定特征之间的交互效应:如果你怀疑某些特征之间的交互效应对目标变量有影响,你可以使用多项式特征变换来引入这些交互项,以改善模型性能。
3.特征工程: 在一些情况下,多项式特征变换是特征工程的一部分,用于改进模型的性能。
4.高次特征: 如果你认为某些特征具有高次项的影响,例如 x^2,x^3,等等,你可以使用多项式特征变换来引入这些高次项,以更好地描述数据的复杂性。
5.用于支持向量机(SVM):在支持向量机中,多项式特征变换可以将数据映射到高维空间,从而使支持向量机能够更好地分隔不同类别的数据。
2.4.1高次特征
import pandas as pd
# pd.set_option('display.max_columns', None) #显示完整的列
data = pd.read_csv(r'train.csv')
# 高次特征
from sklearn.preprocessing import PolynomialFeatures
# degree=2表示最高2次幂
poly = PolynomialFeatures(degree=2)
print('SibSp和Parch列的值:')
print(data[['SibSp','Parch']].head())
print('*'*40)
print('SibSp和Parch列的值做2次幂高次特征:')
#SibSp和Parch这两列的值的高次特征:1 SibSp^1 Parch^1 SibSp^2 SibSp*Parch Parch^2
poly_fea = poly.fit_transform(data[['SibSp','Parch']])
print(poly_fea)
print('*'*40)
#意思是:1 SibSp^1 Parch^1 SibSp^2 SibSp*Parch Parch^2
print('SibSp和Parch做2次幂高次特征:')
print(poly.get_feature_names_out(input_features=['SibSp','Parch']))
运行结果:
SibSp和Parch列的值:
SibSp Parch
0 1 0
1 1 0
2 0 0
3 1 0
4 0 0
****************************************
SibSp和Parch列的值做2次幂高次特征:
[[1. 1. 0. 1. 0. 0.]
[1. 1. 0. 1. 0. 0.]
[1. 0. 0. 0. 0. 0.]
...
[1. 1. 2. 1. 2. 4.]
[1. 0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0. 0.]]
****************************************
SibSp和Parch做2次幂高次特征:
['1' 'SibSp' 'Parch' 'SibSp^2' 'SibSp Parch' 'Parch^2']
离散化
import pandas as pd
# pd.set_option('display.max_columns', None) #显示完整的列
data = pd.read_csv(r'train.csv')
# 离散化
data.loc[:,'fare_cut'] = pd.cut(data['Fare'],5)
print(data.head())
print(data['fare_cut'].unique())
运行结果:
PassengerId Survived Pclass ... Cabin Embarked fare_cut
0 1 0 3 ... NaN S (-0.512, 102.466]
1 2 1 1 ... C85 C (-0.512, 102.466]
2 3 1 3 ... NaN S (-0.512, 102.466]
3 4 1 1 ... C123 S (-0.512, 102.466]
4 5 0 3 ... NaN S (-0.512, 102.466]
[5 rows x 13 columns]
[(-0.512, 102.466], (204.932, 307.398], (102.466, 204.932], (409.863, 512.329]]
Categories (5, interval[float64, right]): [(-0.512, 102.466] < (102.466, 204.932] <
(204.932, 307.398] < (307.398, 409.863] <
(409.863, 512.329]]
3.字符型特征
类别型:
- pandas get_dummies/哑变量
- OneHotEncoder()/独热向量编码
- LabelEncoder()/标签编码
3.1哑变量
独热编码/哑变量差不多
get_dummies()是pandas库中的一个函数,用于将分类变量转换为虚拟变量(哑变量)的形式。它将分类变量的每个不同取值创建一个新的二进制列,并为每个样本指示其所属的类别。
"""
pandas.get_dummies(data,
columns=None,
prefix=None,
prefix_sep='_',
drop_first=False,
dummy_na=False,
sparse=False,
dtype=None)
参数说明:
data: 要进行虚拟编码的数据,可以是一个DataFrame 或Series。
columns (可选):一个用于指定要编码的列名的列表。如果不指定,函数将
尝试对数据中的所有非数值列进行编码。
prefix (可选):一个字符串或字符串列表,用于指定生成的虚拟列的前缀。
如果提供了多个前缀,它们将与列名一一对应。默认情况下,生成的虚拟列
的名称将与原始分类值相同。
prefix_sep (可选):用于分隔前缀和列名的字符串。默认为下划线“_”。
drop_first(可选):如果设置为True,则将删除每个虚拟列中的第一个级
别,以避免多重共线性。默认为False。
dummy_na (可选):如果设置为 True,将为缺失值创建虚拟列,表示原始
列中的缺失值。默认为False。
sparse (可选): 如果设置为 True,则生成稀疏矩阵,否则生成密集矩阵。
稀疏矩阵在具有大量零值的情况下可以节省内存。默认为False。
dtype(可选):用于指定生成虚拟列的数据类型。默认为None,会自动根据
数据类型选择。
"""
import pandas as pd
# pd.set_option('display.max_columns', None) #显示完整的列
data = pd.read_csv(r'train.csv')
# 哑变量
print('Embarked列的数据:')
print(data['Embarked'])
print('*'*30)
# 有多少唯一值就生成多少列,为True就表示是原来的值
embark_out = pd.get_dummies(data['Embarked'],prefix='Embarked')
print(embark_out)
print('*'*30)
运行结果:
Embarked列的数据:
0 S
1 C
2 S
3 S
4 S
..
886 S
887 S
888 S
889 C
890 Q
Name: Embarked, Length: 891, dtype: object
******************************
Embarked_C Embarked_Q Embarked_S
0 False False True
1 True False False
2 False False True
3 False False True
4 False False True
.. ... ... ...
886 False False True
887 False False True
888 False False True
889 True False False
890 False True False
[891 rows x 3 columns]
******************************
特征提取文本信息
CountVectorizer
是用于将文本数据转换为词频矩阵的类。它将文本数据作为输入,将每个文本转换为一个向量,其中每个元素表示一个词汇的出现次数。
# 特征提取文本信息
from sklearn.feature_extraction.text import CountVectorizer
data = ["Life is too short to spend time with people who suck the happiness out of you",
" If someone wants you in their life,they’ll make room for you"]
transfer = CountVectorizer(stop_words=['just'])
"""
通过调用fit_transform()方法,CountVectorizer将计算每个文本中每个词汇的出现次数,
并返回一个稀疏矩阵new_data,其中每行表示一个文本样本,每列表示一个词汇。
"""
new_data = transfer.fit_transform(data)
print('列表中的两句话,对应下面的names中单词出现的次数:')
print(new_data.toarray())
names = transfer.get_feature_names_out()
print('单词名:')
print(names)
运行结果:
列表中的两句话,对应下面的names中单词出现的次数:
[[0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 1 1]
[1 0 1 1 0 1 1 1 0 0 0 1 0 1 0 0 0 1 1 0 0 0 1 0 0 2]]
单词名:
['for' 'happiness' 'if' 'in' 'is' 'life' 'll' 'make' 'of' 'out' 'people'
'room' 'short' 'someone' 'spend' 'suck' 'the' 'their' 'they' 'time' 'to'
'too' 'wants' 'who' 'with' 'you']
这样,每个文本被转换为了一个向量,其中每个元素表示对应词汇的出现次数。特征名称列表显示了所有提取的词汇。
3.2标签编码
比如性别:男、女,将男变为1,将女变为2
后续持续学习更新