栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Chpater 3 sklearn数据集与估计器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Chpater 3 sklearn数据集与估计器

sklearn数据集 数据集划分

训练集:75%(推荐)、70%、80%。用于训练,构建模型
测试集:25%(推荐)、30%、20%。在模型检验时使用,用于评估模型是否有效

scikit-learn数据集API介绍

sklearn.datasets加载获取流行数据集
datasets.load_()获取小规模数据集,数据包含在datasets里
datasets.fetch_(data_home=None)获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

获取数据集返回的类型

load和fetch返回的数据类型datasets.base.Bunch(字典格式)
data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
DESCR:数据描述
feature_names:特征名,新闻数据,手写数字、回归数据集没有
target_names:标签名,回归数据集没有

from sklearn.datasets import load_iris
li=load_iris()
print('获取特征值:{}'.format(li.data))
print('获取目标值:{}'.format(li.target))
print('描述:{}'.format(li.DESCR))
sklearn分类数据集

数据集进行分割

sklearn.model_selection.train_test_split(*arrays, **options)
x 数据集的特征值
y 数据集的标签值
test_size 测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
return 训练集特征值,测试集特征值,训练标签,测试标签(默认随机取,顺序不可变)

from sklearn.model_selection import  train_test_split
li=load_iris()
#print('获取特征值:{}'.format(li.data))
#print('获取目标值:{}'.format(li.target))
#print('描述:{}'.format(li.DESCR))

#注意返回值 训练集train x_train y_train   测试集test  x_test  y_test
x_train,x_test,y_train,y_test=train_test_split(li.data,li.target,test_size=0.25)
print('训练集特征值和目标值:',x_train,y_train)
print('测试集特征值和目标值:',x_test,y_test)
用于分类的大数据集

sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
subset: ‘train’或者’test’,‘all’,可选,选择要加载的数据集.
训练集的“训练”,测试集的“测试”,两者的“全部”
datasets.clear_data_home(data_home=None)
清除目录下的数据

from sklearn.datasets import fetch_20newsgroups
news=fetch_20newsgroups(subset='all')
print(news.data)
print(news.target)
sklearn回归数据集

from sklearn.datasets import load_boston
lb=load_boston()
print('获取特征值:{}'.format(lb.data))
print('获取目标值:{}'.format(lb.target))
print('描述:{}'.format(lb.DESCR))
转换器与估计器 转换器

fit_transform():输入数据直接转换
fit():输入数据,但是不做事情(计算平均值、方差等等)+transform()进行数据的转换

In [1]: from sklearn.preprocessing import StandardScaler

In [2]: s=StandardScaler()

In [3]: s.fit_transform([[1,2,3],[4,5,6]])
Out[3]:
array([[-1., -1., -1.],
       [ 1.,  1.,  1.]])

In [4]: ss=StandardScaler()

In [5]: ss.fit([[1,2,3],[4,5,6]])
Out[5]: StandardScaler()

In [6]: ss.transform([[1,2,3],[4,5,6]])    #以[[1,2,3],[4,5,6]]计算来的标准差和均值来转换的
Out[6]:
array([[-1., -1., -1.],
       [ 1.,  1.,  1.]])

In [7]: ss.fit([[2,3,4],[4,5,7]])
Out[7]: StandardScaler()

In [8]:  ss.transform([[1,2,3],[4,5,6]])   #[[2,3,4],[4,5,7]]计算来的标准差和均值来转换的
Out[8]:
array([[-2.        , -2.        , -1.66666667],
       [ 1.        ,  1.        ,  0.33333333]])
估计器

在sklearn中,估计器(estimator)是一个重要的角色,分类器和回归器都属于estimator,是一类实现了算法的API。
1、用于分类的估计器:
sklearn.neighbors k-近邻算法
sklearn.naive_bayes 贝叶斯
sklearn.linear_model.LogisticRegression 逻辑回归
2、用于回归的估计器:
sklearn.linear_model.LinearRegression 线性回归
sklearn.linear_model.Ridge 岭回归

k-近邻算法
  • 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
    两个样本的距离可以通过如下公式计算,又叫欧式距离,比如说,a(a1,a2,a3),b(b1,b2,b3)
import pandas as pd
from sklearn.model_selection import  train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

def knncls():
    '''
    K—近邻预测用户签到位置
    :return:None
    '''
    #读取数据
    data=pd.read_csv('./data/FBlocation/train.csv')
    #处理数据
    #1.缩小数据,查询数据筛选
    data.query('x>1.0 & x<1.25 & y>2.5 & y<2.75')  #data.query()查询语句,data是DataFrame
    #2.处理时间数据
    time_value=pd.to_datetime(data['time'],unit='s')
    #3.将日期函数转换为字典
    time_value=pd.DatetimeIndex(time_value)
    #3.构造一些特征
    data['day']=time_value.day
    data['hour']=time_value.hour
    data['weekday']=time_value.weekday
    #4.删除时间戳特征
    data=data.drop(['time'],axis=1)  #sklearn中0表示列,pandas在1表示列
    #将签到数量少于n个目标位置删除
    place_count = data.groupby('place_id').count()#按照place_id将数据分组,再求和,索引为place_count
    tf = place_count[place_count.row_id > 3].reset_index()#reset_index()将place_count重新变为一列,索引就变为0,1,2……
    data = data[data['place_id'].isin(tf.place_id)]
    #取出数据当中的特征值和目标值
    y=data['place_id']
    x=data.drop(['place_id'],axis=1)

    #进行数据的分割训练集和测试集
    x_train, x_test, y_train, y_test=train_test_split(x,y,test_size=0.25)

    #特征工程(对特征值进行标准化)
    std=StandardScaler()
    x_train=std.fit_transform(x_train)
    x_test=std.transform(x_test)  #不需要fit,因为上面已经计算了均值和标准差
    #进行算法流程
    knn=KNeighborsClassifier(n_neighbors=5)

    #fit predict score
    knn.fit(x_train,y_train)
    #得出预测结果
    y_predict=knn.predict(x_test)
    print('预测的目标签到位置:',y_predict)
    #得出准确率
    print('预测的准确率',knn.score(x_test,y_test))
if __name__=='__main__':
    knncls()
  • 总结
    (1)k值大小
    k值取很小:容易受异常点影响
    k值取很大:容易受最近数据太多导致比例变化
    (2)优缺点:
    优点:简单,易于理解,易于实现,无需估计参数,无需训练
    缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大;必须指定K值,K值选择不当则分类精度不能保证。
    使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试。
    k-近邻算法实现:加快搜索速度——基于算法的改进KDTree,API接口里面有实现
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976917.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号