python机器学习随笔-第一天

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)

 

上一篇:import tensorflow 报错: tf.estimator package not installed.


下一篇:机器学习: 聚类算法