仅供参考
监督学习:输入数据有特征有标签,即有标准答案;(分类、回归)
无监督学习:输入数据有特征无标签,即无标准答案;(聚类)
pip3 install Scikit-learn
;sklearn.datasets
:加载获取流行数据集;datasets.load_*()
:获取小规模数据集,数据包含在 datasets 里;datasets.fetch_*(data_home=None)
:获取大规模数据集,需要从网络上下载,函数的第一个参数是 data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/;sklearn.datasets.load_iris()
:加载并返回鸢尾花数据集;sklearn.datasets.load_boston()
:加载并返回波士顿房价数据集;sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
load_*
和 fetch_*
返回的数据类型是 datasets.base.Bunch
(继承自字典格式),key 如下:
dict["key"] = values
bunch.key = values
sklearn.model_selection.train_test_split(arrays, *options)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
def datasets_demo():
# 2.3 获取鸢尾花数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
# 2.4 返回值是一个继承自字典的Bench
# print("鸢尾花的特征值:\n", iris["data"])
# print("鸢尾花的目标值:\n", iris.target)
# print("鸢尾花特征的名字:\n", iris.feature_names)
# print("鸢尾花目标值的名字:\n", iris.target_names)
# print("鸢尾花的描述:\n", iris.DESCR)
# 2.5 数据集划分
# test_size: 测试集范围
# random_state:随机数种子
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target,test_size=0.25,random_state=22)
print("训练集的特征值:\n", x_train, x_train.shape)
return None
# 表示作为脚本直接执行,import 到其他的 python 脚本中不会执行
if __name__ == "__main__":
# 代码1:sklearn 数据集的使用
datasets_demo()
吴恩达:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已;
sklearn.feature_extraction
;sklearn.feature_extraction.DictVectorizer(sparse=True,...)
sparse 表示稀疏矩阵;
DictVectorizer.fit_transform(X)
:X 是字典或者包含字典的迭代器返回值。返回 sparse 矩阵;DictVectorizer.inverse_transform(X)
:X 是 array 数组或者 sparse 矩阵。返回转换之前数据格式;DictVectorizer.get_feature_names_out()
:返回类别名称;DictVectorizer
;fit_transform
方法输入数据并转换(注意返回格式);def dict_demo():
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("返回的结果:\n", data_new)
# 打印特征名字
print("特征名字:\n", transfer.get_feature_names_out())
return None
有两种方法,一种统计词频率,另一种统计关键词;
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
stop_words 为停用词。返回词频矩阵;
CountVectorizer.fit_transform(X)
:X 是文本或者包含文本字符串的可迭代对象。返回 sparse 矩阵;CountVectorizer.inverse_transform(X)
:X 是 array 数组或者 sparse 矩阵。返回转换之前数据格式;CountVectorizer.get_feature_names_out()
:返回单词列表(特征)" ".join(list(jieba.cut(text)))
;CountVectorizer
;fit_transform
方法输入数据并转换 (注意返回格式,利用 toarray()
进行 sparse 矩阵转换 array 数组)def en_count_demo():
data = ["life is short,i like python","life is too too long,i dislike python"]
# 1.实例化一个转换器类
transfer = CountVectorizer()
# transfer = CountVectorizer(stop_words=["is","too"]) #带停用词形式
# 2.调用 fit_transform
data_new = transfer.fit_transform(data)
print("data_new 的类型:" , type(data_new))
print("文本特征抽取的结果:\n", data_new.toarray())
print("返回特征名字:\n", transfer.get_feature_names_out())
return None
def cut_word(text):
return " ".join(list(jieba.cut(text)))
def ch_count_demo():
data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
# 1.将中文文本进行分词
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# 2.实例化一个转换器类
transfer = CountVectorizer()
# 3.调用 fit_transform
data_final = transfer.fit_transform(data_new)
print("data_final 的类型:" , type(data_final))
print("文本特征抽取的结果:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names_out())
return None
T F − I D F = i f ∗ i d f TF-IDF = if * idf TF−IDF=if∗idf
sklearn.feature_extraction.text.TfidfVectorizer(stop_words=[])
;def cut_word(text):
return " ".join(list(jieba.cut(text)))
def tfidf_demo():
data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
# 1.将中文文本进行分词
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# 2.实例化一个转换器类
transfer = TfidfVectorizer()
# 3.调用 fit_transform
data_final = transfer.fit_transform(data_new)
print("data_final 的类型:", type(data_final))
print("文本特征抽取的结果:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names_out())
return None
X
‘
=
x
−
m
i
n
m
a
x
−
m
i
n
X^` =\frac{x-min}{max-min}
X‘=max−minx−min
X
‘
‘
=
X
‘
∗
(
m
x
−
m
i
)
+
m
i
X^{``}=X^`*(mx-mi)+mi
X‘‘=X‘∗(mx−mi)+mi
sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)... )
MinMaxScalar.fit_transform(X)
def minmax_demo():
# 1.获取数据
data = pd.read_csv("../resources/data/dating.txt", sep='\t')
data = data.iloc[:,:3]
print("data:\n", data)
# 2.实例化一个转化器类
transfer = MinMaxScaler()
# transfer = MinMaxScaler(feature_range=[2, 3]) #带范围
# 3.调用 fit_transform
data_new = transfer.fit_transform(data)
print("最小值最大值归一化处理的结果:\n", data_new)
return None
X ‘ = x − m e a n σ X^`=\frac{x-mean}{\sigma} X‘=σx−mean
sklearn.preprocessing.StandardScaler( )
StandardScaler.fit_transform(X)
def stand_demo():
# 1.获取数据
data = pd.read_csv("../resources/data/dating.txt", sep='\t')
data = data.iloc[:,:3]
print("data:\n", data)
# 2.实例化一个转化器类
transfer = StandardScaler()
# 3.调用 fit_transform
data_new = transfer.fit_transform(data)
print("标准化处理的结果:\n", data_new)
return None
sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
;
VarianceThreshold.fit_transform(X)
;
def variance_demo():
data = pd.read_csv("../resources/p01_machine_learning_sklearn/factor_returns.csv")
print(data)
# 1、实例化一个转换器类
transfer = VarianceThreshold()
# transfer = VarianceThreshold(threshold=5) #设置方差阈值
# 2、调用fit_transform
data_new = transfer.fit_transform(data.iloc[:, 1:-2])
print("删除低方差特征的结果:\n", data_new)
print("形状:\n", data_new.shape)
return None
r = n ∑ x y − ∑ x ∑ y n ∑ x 2 − ( ∑ x ) 2 n ∑ y 2 − ( ∑ y ) 2 r=\frac{n\sum_{}xy-\sum_{}x\sum_{}y}{\sqrt{n\sum_{}x^2-(\sum_{}x)^2} \sqrt{n\sum_{}y^2-(\sum_{}y)^2}} r=n∑x2−(∑x)2n∑y2−(∑y)2n∑xy−∑x∑y
相关系数的特点:
特征降维策略:
库:from scipy.stats import pearsonr
pearsonr(X,Y)
:
from scipy.stats import pearsonr
import matplotlib.pyplot as plt
def pearsonr_demo():
data = pd.read_csv("../resources/p01_machine_learning_sklearn/factor_returns.csv")
# 1.计算皮尔逊相关系数
r = pearsonr(data["revenue"], data["total_expense"])
print("皮尔逊相关系数:", r)
# 2.绘图
plt.figure(figsize=(20, 8), dpi=100)
plt.scatter(data["revenue"], data["total_expense"])
plt.show()
return None
定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量;
作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息;
应用:回归分析或者聚类分析当中;
例子:二维降成一维可以理解成:找到一条合适的直线,使二维信息尽可能完整。即通过矩阵运算得出主成分分析的结果;
类:sklearn.decomposition.PCA(n_components=None)
PCA.fit_transform(X)
def pca_demo():
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]
# 1、实例化PCA, 小数——保留多少信息
transfer = PCA(n_components=0.9)
# 2、调用fit_transform
data1 = transfer.fit_transform(data)
print("保留90%的信息,降维结果为:\n", data1)
# 1、实例化PCA, 整数——指定降维到的维数
transfer2 = PCA(n_components=3)
# 2、调用fit_transform
data2 = transfer2.fit_transform(data)
print("降维到3维的结果:\n", data2)
return None