Kaggle网址:https://www.kaggle.com/datasets
UCI数据集网址: http://archive.ics.uci.edu/ml/
scikit-learn网址:https://scikit-learn.org/stable/
def datasets_demo():
"""
sklearn数据集使用
:return:
"""
# 获取数据集
iris = load_iris()
print("鸢尾花数据集:\n", iris)
print("查看数据集描述:\n", iris["DESCR"])
print('鸢尾花的目标值:\n', iris.target)
print("查看特征值的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_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)
return None
sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
sklearn.model_selection.train_test_split(arrays, *options)
# 数据集划分
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)
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
特征提取是将任意数据(如文本或图像)转换为可用于机器学习的数字特征
特征提取API:sklearn.feature_extraction
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():
"""
文本特征抽取:CountVecotrizer
:return:
"""
data = ["Life is short, i like 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 cut_word(text):
"""
进行中文分词:“我爱北京天安门” --->"我 爱 北京 天安门"
:param text:
:return:
"""
text = " ".join(list(jieba.cut(text)))
return text
def count_chinese_demo2():
"""
中文文本特征抽取,自动分词
:return:
"""
# 1.将中文文本进行分词
data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
# 2.实例化一个转换器类
transfer = CountVectorizer(stop_words=['一种', '因为'])
# 3.调用fit_transform
data_final = transfer.fit_transform(data_new)
print("data_new:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
def tfidf_demo():
"""
用tfidf的方法进行文本特征提取
:return:
"""
# 1.将中文文本进行分词
data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
# 2.实例化一个转换器类
transfer = TfidfVectorizer(stop_words=["一种", '因为'])
# 3.调用fit_transform
data_final = transfer.fit_transform(data_new)
print("data_new:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
原因:特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征
数值型数据的无量纲化:
API:sklearn.preprocessing
通过对原始数据进行变换把数据映射到(默认为[0,1])之间
def minmax_demo():
"""
归一化
:return:
"""
# 1.获取数据
data = pd.read_csv('dating.txt')
data = data.iloc[:, :3]
# print("data:\n", data)
# 2.实例化一个转换器类
transfer = MinMaxScaler()
# 3.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
return None
注意:最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性(健壮性)较差,只适合传统精确小数据场景。
通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
def stand_demo():
"""
标准化
:return:
"""
# 1. 获取数据
data = pd.read_csv('dating.txt')
data = data.iloc[:, :3]
print('data:\n', data)
# 2.实例化一个转换器类
transfer = StandardScaler()
# 3.调用fit_transform()
data_new = transfer.fit_transform(data)
print('data_new:\n', data_new)
return None
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程
降维的两种方式
数据中包含冗余或无关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。
方法:
API:sklearn.feature_selection
删除低方差的一些特征,前面讲过方差的意义。再结合方差的大小来考虑这个方式的角度。
def variance_demo():
"""
过滤低方差特征
:return:
"""
# 1. 获取数据
data = pd.read_csv('factor_returns.csv')
data = data.iloc[:, 1:-2]
print('data:\n', data)
# 2. 实例化一个转换器类
transfer = VarianceThreshold(threshold=10)
# 3. 调用fit_transform()
data_new = transfer.fit_transform(data)
print('data_new:\n', data_new, data_new.shape)
return None
皮尔逊相关系数(Pearson Correlation Coefficient)
def pearsonr_demo():
"""
相关系数计算
:return: None
"""
data = pd.read_csv("factor_returns.csv")
data = data.iloc[:, 1:-2]
# 计算某两个变量之间的相关系数
r1 = pearsonr(data['pe_ratio'], data['pb_ratio'])
print('pe_ratio与pb_ratio相关系数:\n', r1)
r2 = pearsonr(data['revenue'], data['total_expense'])
print('revenue与total_expense相关系数:\n', r2)
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=2)
# 2. 调用fit_transform()
data_new = transfer.fit_transform(data)
print('data_new:\n', data_new)
return None
关于本节所有代码及数据集相关文件参考如下链接:
https://download.csdn.net/download/qq_45625499/21048609?spm=1001.2014.3001.5501