一. 特征工程
特征工程 是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性
二. 具体方法
- 字典特征抽取
- API : sklearn.feature_extraction.DictVectorizer
- 对字典数据进行特征值化
- 第一步 : 实例化 DictVectorize
- 第二步 : 调用 fit_transform 输入数据并转换 返回的是 sparse 矩阵,转换为数组 用 .toarray() 方法
- 具体代码:
dict_file = [
{'city': '北京', 'temperature': 100},
{'city': '上海', 'temperature': 60},
{'city': '深圳', 'temperature': 30},
]
dict = DictVectorizer(sparse=False)
# 调用 fit_transform
data = dict.fit_transform(dict_file)
# one-hot编码 把分类数据转化为二进制格式,供机器学习使用。
print(data)
print(dict.inverse_transform(data)) # inverse_transform 是将数据格式转化为 转换之前的格式
print(dict.get_feature_names())
运行结果 :
- 文本特征抽取
1. API : sklearn.feature_extraction.text.CountVectorizer
2. 对 英文文本 进行特征值化
data_file1 = [
"life is short ,i like python is is is",
"life is too long,i dislike python"
]
cv = CountVectorizer() # 进行实例化
data1 = cv.fit_transform(data_file1) # 计算
print(cv.get_feature_names())
print(data1.toarray())
运行结果 :
- 中文文本特征值化
1. 因为不支持单个中文, 所以我们需要用到另外一个库 jieba 分词库 专门对中文进行分词
2. API : sklearn.feature_extraction.text.CountVectorizer 和 jieba
3. 第一步 : 先利用 jieba 对文本进行分词处理
4. 第二步 : 将分词后的结果作为输入, 输入到 CountVectorizer 中
text1 = "当你拼命想完成一件事的时候,你就不再是别人的对手,或者说得更确切一些,别人就不再是你的对手了,不管是谁,只要下了这个决心,他就会立刻觉得增添了无穷的力量,而他的视野也随之开阔了"
text2 = "探索人类的过去,最直接可靠的方法是寻找留下的化石和遗迹,用比较解剖学方法找出化石之间的联系。但人的遗骸成为化石本身就是一个小概率事件,能找到的化石就更少了,而且大都是支离破碎。"
text3 = "科技力量正在重新定义日常生活,也在重新塑造城市的经济结构。GDP增速6.2%——在北京2019年交出的成绩单中,“三城一区”实现的地区产值贡献超三成。"
# print(jieba.cut(text1))
data1 = jieba.cut(text1)
data2 = jieba.cut(text2)
data3 = jieba.cut(text3)
# 转换成列表
content1 = list(data1)
content2 = list(data2)
content3 = list(data3)
# 把列表转换成字符串
c1 = ' '.join(content1)
c2 = ' '.join(content2)
c3 = ' '.join(content3)
# 实例化
cv = CountVectorizer()
# 输入 进行计算
data = cv.fit_transform([c1,c2,c3])
print(cv.get_feature_names())
print(data.toarray())
运行结果 :
- TF-IDF
1. 主要思想 : 如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类
2. API : sklearn.feature_extraction.text.TfidfVectorizer
3. 返回值 : 返回的是权重矩阵
# 依然使用上一个的中文分词
tf = TfidfVectorizer()
data = tf.fit_transform([c1,c2,c3])
print(data.toarray())
运行结果 :
三. 特征处理
- 归一化
1. API : sklearn.preprocessing.MinMaxScaler
2. 特点: 就是将所有的数据按照相应的比例映射到一个统一的区间范围之内
3. 归一化的原理公式
4. 如果数据中的异常点比较多, 那么最大值最小值就会受到影响 下面是一个小小的例子
# 实例化 API feature_range : 设置映射的区间 如果不设置 默认区间是 [0,1]
mm = MinMaxScaler(feature_range=(2,3))
# 随便搞了一些数据, 看一下缩放之后的效果
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
运行结果:
- 标准化
1. API : sklearn.preprocessing.StandardScaler
2. 特点 : 通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
3. 原理 :
4. 因为标准化引入了标准差,所以异常点在大数据下显得不值一提,此方法适用于大规模的数据
5. 相应的代码 :
# 实例化
std = StandardScaler()
# 计算
data = std.fit_transform([[1,-1,3],[2,4,2],[4,6,-1]])
print(data)
运行结果 :
今天先写到这里, 以后再补充, 谢谢阅读 !