1.scikit-learn数据集API介绍
·sklearn.datasets 加载获取流行数据集
datasets.load_*() 获取小规模数据集,数据集包含在datasets里
datasets.fetch_*() 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,
默认~/scikit_learn_data/
2.sklearn小数据集
·sklearn.datasets.load_iris() 加载并返回鸢尾花
·sklearn.datasets.load_boston()加载并返回波士顿房价数据集
3.数据集的返回值
·datasets.base.Bunch(继承自字典)
dict["key"] = values
dict.key = values
特征工程(Feature Engineering)
sklearn 特征工程
pandas数据清洗 ,数据处理
#####特征抽取/特征提取#######
特征提取API
·字典特征提取(特征离散化)
·文本特征提取
·图像特征提取
sklearn.feature_extraction
·字典特征提取
sklearn.feature_extraction.DictVectorizer(sparse=True)
DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵
sparse表示稀疏矩阵
将非零值 按位置表示出来
节省内存 提高加载效率
DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
DictVectorizer.get_feature_names() 返回类别名称
总结:对于特征当中存在类别信息我们都会做one-hot编码处理(不区分优先级)
应用场景:
1.pclass,sex 数据集当中特征值比较多
DictVectorizer转换
2.本身拿到的数据就是字典类型
·文本特征提取
单词 作为 特征
句子、短语、字母、单词都可以作为特征
特征:特征词
方法1:CountVectorizer(stop_words=[])
stop_words停用词
停用词表
CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格
CountVectorizer.get_feature_name() 返回值:单词列表
关键词:在某一个类别的文章中,出现次数很多,但是在其他类别的文章当中出现很少
方法2:TfidfVectorizer
TF-IDF 重要程度
两个词 “经济”,“非常”
1000篇文章-语料库
100篇文章-“非常”
10篇文章-“经济”
两篇文章
文章A(100词):10次“经济”TF-IDF=0.2
tf = 10/100 = 0.1 IDF=lg(1000/10)=2
文章B(100词):10次“非常”TF-IDF=0.1
tf = 10/100 = 0.1
TF -词频(term frequency) IDF=lg(1000/100)=1
IDF-逆向文档频率
####数据预处理#####
无量纲化
·归一化:通过原始数据进行变换把数据映射到(默认为[0,1])之间
·sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
MinMaxScalar.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features] 参数为 行 列
·标准化:通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围内
(x-mean)/std
标准差:集中程度
·sklearn.preprocessing.StandardScaler()
StandardScaler.fit_transform(X)
·降维 ndarray
维数:嵌套的层数 0维-标量 1维-向量 2维-矩阵
此处的降维:降低特征(随机变量)的个数
效果:特征与特征之间不相关
·特征选择
Filter过滤式
方差选择发:低方差特征过滤 方差小:某个特征大多样本的值比较相近
·sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
·删除所有低方差特征
·Variance.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有
非零方差特征。即删除所有相同的特征值
相关系数-衡量特征与特征之间的相关程度
皮尔逊相关系数
Embeded嵌入式
决策树
正则化
深度学习
·主成分分析:高维数据转化为低维数据的过程中可能会舍弃原有数据、创造新的变量
是数据维度压缩,尽可能降低原数据的维度(复杂性),损失少量信息
应用:回归分析或者聚类分析当中
·sklearn.decomposition.PCA(n_components=None)
·将数据分解为较低维度空间
·n_components:小数:表示保留百分之多少的信息
整数;减少到多少特征 如二维n_components=2
·PCA.fit_transform(X) X:numpy array格式数据 [n_samples,n_features]
·返回值:转换后指定维度的array
案例:探究用户对物品类别的喜好细分
用户 物品类别
user_id aisle_id
见jupyter notebook
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCV def knn_iris(): """ 用KNN算法对鸢尾花进行分类 :return: """ #1)获取数据 iris = load_iris() #2)划分数据集 x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6) #3)特征工程:标准化 transfer = StandardScaler() x_train= transfer.fit_transform(x_train)#训练集 x_test = transfer.transform(x_test) #用训练集的标准差和平均值做标准化 transform的作用是根据找到的规则对数据进行转换 #4)KNN算法预估器 estimator = KNeighborsClassifier(n_neighbors=3) estimator.fit(x_train,y_train) #5)模型评估 #方法1:直接比对真实值和预测值 y_predict = estimator.predict(x_test) print("y_predict:\n",y_predict) print("直接比对真实值和预测值:\n",y_test == y_predict) #方法2:计算准确率 score= estimator.score(x_test,y_test) print("准确率为:\n",score) return None def knn_iris_gscv(): """ 用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证 :return: """ #1)获取数据 iris = load_iris() #2)划分数据集 x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6) #3)特征工程:标准化 transfer = StandardScaler() x_train= transfer.fit_transform(x_train)#训练集 x_test = transfer.transform(x_test) #用训练集的标准差和平均值做标准化 transform的作用是根据找到的规则对数据进行转换 #4)KNN算法预估器 estimator = KNeighborsClassifier() #加入网格搜索与交叉验证 #参数准备 param_dict= {"n_neighbors":[1,3,5,7,9,11]} estimator = GridSearchCV(estimator,param_grid=param_dict,cv = 10) estimator.fit(x_train,y_train) #5)模型评估 #方法1:直接比对真实值和预测值 y_predict = estimator.predict(x_test) print("y_predict:\n",y_predict) print("直接比对真实值和预测值:\n",y_test == y_predict) #方法2:计算准确率 score= estimator.score(x_test,y_test) print("准确率为:\n",score) # ·最佳参数:best_params_ print("最佳参数:\n",estimator.best_params_) # ·最佳结果:best_score_ print("最佳结果:\n",estimator.best_score_) # ·最佳估计器:best_estimator_ print("最佳估计器:\n",estimator.best_estimator_) # ·交叉验证结果:cv_results_ print("交叉验证结果:\n",estimator.cv_results_) return None if __name__ =="__main__": #代码1:用KNN算法对鸢尾花进行分类 # knn_iris() knn_iris_gscv()
jupyter notebook
#1.获取数据 #2.合并表 #3.找到user_id和aisle之间的关系 #4.PCA降维 import pandas as pd order_products = pd.read_csv("./instacart/order_products_prior.csv") products = pd.read_csv("./instacart/products.csv") orders = pd.read_csv("./instacart/orders.csv") aisles = pd.read_csv("./instacart/aisles.csv") #2.合并表 #合并aisles和products ,让aisle和product_id在一起 tab1 = pd.merge(aisles,products,on=["aisle_id","aisle_id"]) tab2 = pd.merge(tab1,order_products,on=["product_id","product_id"]) tab3 = pd.merge(tab2,orders,on=["order_id","order_id"]) #3.找到user_id和aisle之间的关系 table = pd.crosstab[tab3["user_id"],tab3["aisle"]] #4.PCA降维 from sklearn.decomposition import PCA #1.实例化一个转换器 transfer = PCA(n_components = 0.95) #保存95%的信息 #2.调用fit_transform data_new = transfer.fit_transform(data)