目录
一、数据集的划分
训练数据:用于训练,构建模型
测试数据:在模型检验时使用,用于评估模型是否有效
from sklearn.model_selection import train_test_split
测试集:20%~30%
二、特征工程
pandas 数据清理、数据处理
特征抽取/特征提取
机器学习算法 - 统计方法 - 数学公式
文本类型 ——>数值
类型——>数值
特征提取:sklearn.feature_extraction
字典特征提取 - 类别 ——>one - hot 编码:sklearn.feature_extraction.Dictvectorize
应用场景:
1)数据集里类别特征较多时
数据集类型--》字典类型
DictVectorize转换
2)本身拿到的数据就是字典类型
文本特征提取
单词 作为 特征
特征: 特征词
方法一: CountVectorizer
统计每个样本特征词出现的个数
特征抽取案例代码:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split # 数据划分用
from sklearn.feature_extraction import DictVectorizer # 特征抽取取
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer # 文本特征值抽取
import jieba # 解析字符串为关键字数组
def datasets_demo():
"""
sklearn数据集使用
:return:
"""
# 获取数据集
iris = load_iris()
# print("iris数据集:\n", iris)
# print("查看数据集描述:\n", iris['DESCR'])
# print("查看特征值的名字:\n", iris.feature_names)
# print("查看特征值:\n", iris.data, iris.data.shape)
# 数据集划分
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)
def dict_demo():
"""
字典特征抽取
:return:
"""
data = [{"city": "北京", 'temperature': 100}, {"city": "上海", "temperature": 60}, {"city": "深圳", "temperature": 30}]
# 1、实例化一个转换器类
transfer = DictVectorizer(sparse=False) # 不返回稀疏矩阵
# 2、调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
print("特征名字:\n", transfer.get_feature_names())
return None
def count_demo():
"""
文本特征抽取
:return:
"""
data = ["life is short,i like python", "life is too long,i dislike python"]
# 1、实例化一个转换器类
transfer = CountVectorizer(stop_words=['is', 'too'])
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
def count_chinese_demo():
"""
中文文本特征抽取
:return:
"""
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())
return None
def cut_word(text):
"""
进行中文分词:”我爱北京天安门“——》”我 爱 北京 天安门“
:param text:
:return:
"""
text = " ".join(list(jieba.cut(text)))
return text
def count_chinese_demo2():
"""
中文文本特征抽取,自动分词
:return:
"""
data = ["一种还是一种今天很残酷,明天更残酷,单绝对大部分是死在明天晚上,所以人不要放弃今天。",
"我们看到的从很遥远星系来的光是几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
# 1、实例化一个转换器类
transfer = CountVectorizer(stop_words=['一种', '所以'])
# 2、调用fit_transform
data_new = transfer.fit_transform(data_new)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
def tfidf_demo():
"""
用TF-IDF的方法进行文本特征抽取
:return:
"""
data = ["一种还是一种今天很残酷,明天更残酷,单绝对大部分是死在明天晚上,所以人不要放弃今天。",
"我们看到的从很遥远星系来的光是几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
# 1、实例化一个转换器类
transfer = TfidfVectorizer(stop_words=['一种', '所以'])
# 2、调用fit_transform
data_new = transfer.fit_transform(data_new)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
if __name__ == '__main__':
# 代码1:sklearn数据集使用
# datasets_demo()
# 代码二:字典特征值抽取
# dict_demo()
# 代码3: 文本特征抽取: CountVecotrizer
# count_demo()
# 代码4: 中文文本特征抽取: CountVecotrizer
# count_chinese_demo()
# 代码5:中文文本特征抽取,自动分词
# count_chinese_demo2()
# 代码6:中文分词
# print(cut_word("我爱北京天安门"))
# 代码7: 用TF-IDF的方法进行文本特征抽取
tfidf_demo()
归一化与标准化
无量纲化
归一化:
异常值:最大值、最小值
标准化:
(x-mean)/std
标准差: 集中程度
应用场景:
在已有样本比较多的情况下比较稳定,适合现代嘈杂大数据场景。
案例代码
from sklearn.preprocessing import MinMaxScaler, StandardScaler # 归一化,标准化
import pandas as pd
def minmax_demo():
"""
归一化
:return:
"""
# 1、获取数据
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
# 2、实例化一个转换器类
transfer = MinMaxScaler(feature_range=[2, 3])
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
return None
def stand_demo():
"""
标准化
:return:
"""
# 1、获取数据
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
# 2、实例化一个转换器类
transfer = StandardScaler()
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
return None
if __name__ == '__main__':
# 代码8:归一化
# minmax_demo()
# 代码9: 标准化
stand_demo()
降维
特征选择
本次案例代码总结:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split # 数据划分用
from sklearn.feature_extraction import DictVectorizer # 特征抽取取
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer # 文本特征值抽取
from sklearn.preprocessing import MinMaxScaler, StandardScaler # 归一化,标准化
from sklearn.feature_selection import VarianceThreshold # 特征选择
from scipy.stats import pearsonr # 皮尔逊系数
from sklearn.decomposition import PCA
import jieba
import pandas as pd
def datasets_demo():
"""
sklearn数据集使用
:return:
"""
# 获取数据集
iris = load_iris()
# print("iris数据集:\n", iris)
# print("查看数据集描述:\n", iris['DESCR'])
# print("查看特征值的名字:\n", iris.feature_names)
# print("查看特征值:\n", iris.data, iris.data.shape)
# 数据集划分
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)
def dict_demo():
"""
字典特征抽取
:return:
"""
data = [{"city": "北京", 'temperature': 100}, {"city": "上海", "temperature": 60}, {"city": "深圳", "temperature": 30}]
# 1、实例化一个转换器类
transfer = DictVectorizer(sparse=False) # 不返回稀疏矩阵
# 2、调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
print("特征名字:\n", transfer.get_feature_names())
return None
def count_demo():
"""
文本特征抽取
:return:
"""
data = ["life is short,i like python", "life is too long,i dislike python"]
# 1、实例化一个转换器类
transfer = CountVectorizer(stop_words=['is', 'too'])
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
def count_chinese_demo():
"""
中文文本特征抽取
:return:
"""
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())
return None
def cut_word(text):
"""
进行中文分词:”我爱北京天安门“——》”我 爱 北京 天安门“
:param text:
:return:
"""
text = " ".join(list(jieba.cut(text)))
return text
def count_chinese_demo2():
"""
中文文本特征抽取,自动分词
:return:
"""
data = ["一种还是一种今天很残酷,明天更残酷,单绝对大部分是死在明天晚上,所以人不要放弃今天。",
"我们看到的从很遥远星系来的光是几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
# 1、实例化一个转换器类
transfer = CountVectorizer(stop_words=['一种', '所以'])
# 2、调用fit_transform
data_new = transfer.fit_transform(data_new)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
def tfidf_demo():
"""
用TF-IDF的方法进行文本特征抽取
:return:
"""
data = ["一种还是一种今天很残酷,明天更残酷,单绝对大部分是死在明天晚上,所以人不要放弃今天。",
"我们看到的从很遥远星系来的光是几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
# 1、实例化一个转换器类
transfer = TfidfVectorizer(stop_words=['一种', '所以'])
# 2、调用fit_transform
data_new = transfer.fit_transform(data_new)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
def minmax_demo():
"""
归一化
:return:
"""
# 1、获取数据
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
# 2、实例化一个转换器类
transfer = MinMaxScaler(feature_range=[2, 3])
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
return None
def stand_demo():
"""
标准化
:return:
"""
# 1、获取数据
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
# 2、实例化一个转换器类
transfer = StandardScaler()
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
return None
def variance_dmeo():
"""
过滤低方差特征
:return:
"""
# 1、获取数据
data = pd.read_csv("factor_returns.csv")
data = data.iloc[:, 1:-2]
# 2、实例化一个转换器类
transfer = VarianceThreshold(threshold=10)
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new, data_new.shape)
# 计算某两个变量之间的相关系数
r = pearsonr(data['pe_ratio'], data["pb_ratio"])
print("相关系数:\n", r)
return None
def pca_demo():
"""
PCA降维
:return:
"""
data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]
# 1、实例化一个转换器类
transfer = PCA(n_components=0.95)
# 2、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
return None;
if __name__ == '__main__':
# 代码1:sklearn数据集使用
# datasets_demo()
# 代码二:字典特征值抽取
# dict_demo()
# 代码3: 文本特征抽取: CountVecotrizer
# count_demo()
# 代码4: 中文文本特征抽取: CountVecotrizer
# count_chinese_demo()
# 代码5:中文文本特征抽取,自动分词
# count_chinese_demo2()
# 代码6:中文分词
# print(cut_word("我爱北京天安门"))
# 代码7: 用TF-IDF的方法进行文本特征抽取
# tfidf_demo()
# 代码8:归一化
# minmax_demo()
# 代码9: 标准化
# stand_demo()
# 代码10: 过滤低方差特征
# variance_dmeo()
# 代码11:PCA降维
pca_demo()