1.特征抽取
1.字典数据的抽取
- 首先导入API
from sklearn.feature_extraction import DictVectorizer
def dictvec():
"""
字典数据抽取
:return:
"""
# 实例化
dict1 = DictVectorizer()
# 调用fit_transform
data = dict1.fit_transform(
[{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}])
print(data)
print(dict1.get_feature_names())
print(data.toarray())
dictvec()
-
print(data) 输出的是一个sparse 矩阵 scipy 基于numpy 节约内存 方便读取处理
-
print(dict1.get_feature_names()) 数组对象每一列的名字
-
print(data.toarray()) 二维数组 numpy array数组
-
其中数字的0和1代表出现了几次
2.文本数据的抽取
- 首先导入API
from sklearn.feature_extraction.text import CountVectorizer
def countvec():
"""
对于文本进行特征值化
:return:None
"""
# 实例化CountVectorizer
cv = CountVectorizer()
# 调用fit_transform输入转换数据
data = cv.fit_transform(["牛奶 蛋糕 巧克力,生椰 拿铁 好利来"])
# 打印
print(data) # sparse矩阵 scipy 基于numpy 节约内存,方便读取处理
print(cv.get_feature_names())
print(data.toarray()) # 二维数组 numpy
countvec()
1.当文本数据没有分词的时候,需要我们手动进行操作调用jieba库来进行分词
- 导入模块
import jieba
con1 = jieba.cut("与善人居,如入芝兰之室,久而不闻其香,即与之化矣。与不善人居,如入鲍鱼之肆,久而不闻其臭,亦与之化矣。")
content1 = list(con1)
c1 = ' '.join(content1)
c1
分词完成后,我们即可用上面的方法进行特征抽取
2.将文本数据提取并且转换
def cutword():
"""
分词
:return:
"""
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
# 转换为列表
content1 = list(con1)
content2 = list(con2)
content3 = list(con3)
# 把列表转换为字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
return c1, c2, c3
def hanzivec():
"""
中文特征值化
:return:None
"""
c1, c2, c3 = cutword()
print(c1, c2, c3)
# 实例化CountVectorizer
cv = CountVectorizer()
# 调用fit_transform输入转换数据
data = cv.fit_transform([c1, c2, c3])
# 打印
print(cv.get_feature_names())
print(data) # sparse矩阵 scipy 基于numpy 节约内存,方便读取处理
print(data.toarray()) # 二维数组 numpy
return None
3.统计文本词汇出现的重要程度
- 导入API
from sklearn.feature_extraction.text import TfidfVectorizer
- 用以评估一字词对于一个文件集或者一个语料
库中其中一份文件的重要程度
def tfidfvec():
"""
中文特征值化
:return:
"""
c1, c2, c3 = cutword()
print(c1, c2, c3)
# 实例化
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
print(data)
print(tf.get_feature_names())
print(data.toarray())
print(tfidfvec())
2.特征预处理
- 数值型数据:标准化处理,归一化处理
1.归一化处理
-
1.归一化处理:通过对原始数据进行变换把数据映射到(默认
为[0,1])之间 这一列的最大值和最小值
-
导入模块
from sklearn.preprocessing import MinMaxScaler
- feature_range=(1,2) 这个范围可以自行选择
def mm():
"""
归一化处理
:return:
"""
mm = MinMaxScaler(feature_range=(1,2))
data = mm.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])
print(data)
return None
print(mm())
2.标准化处理
-
标准化处理 :通过对原数据进行变换,把数据变换均值为
0,方差为1的范围内
-
导入模块
from sklearn.preprocessing import StandardScaler
def stand():
"""
标准化处理
:return:
"""
std = StandardScaler()
data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])
print(data)
return None
print(stand())
- 类别型数据:one-hot编码
时间类型:时间的切分
3.特征选择
- 数据问题:
- 冗余:部分特征的相关度高 容易消耗计算性能
面积 半径 周长 - 噪声:部分特征对预测结果有负影响
1. 删除低方差的特征
- 导入模块
from sklearn.feature_selection import VarianceThreshold
- (threshold=0.1) 方差低于0.1的删除
def var():
"""
特征选择-删除低方差的特征
:return: None
"""
var = VarianceThreshold(threshold=0.1)
data = var.fit_transform([[0, 2, 0, 3], [3, 1, 4, 3], [4, 1, 1, 3]])
print(data)
return None
print(var())
2. PCA主成分分析进行特征选择
- 导入模块
from sklearn.decomposition import PCA
- n_components=1 时减少到1个特征
- 1.整数 减少到特征数量
- 2.小数 0-1 90% 90%-95%
def pca():
"""
主成分分析进行特征选择
:return:
"""
# 特征数量达到上百的时候 考虑数据简化 数据内容也会变 特征数量减少
# 1.整数 减少到特征数量 整数是1,就减少到一个特征
# 2.小数 0-1 90% 90%-95%
pca = PCA(n_components=0.95)
data = pca.fit_transform([[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]])
print(data)
pca()