美文网首页
机器学习0

机器学习0

作者: Aptitude | 来源:发表于2019-03-10 22:05 被阅读0次

    1. 数据集

    • 训练数据:用于训练,构建模型;
    • 测试数据:在模型检验时使用,用于评估模型是否有效。
    #sklearn中的数据集API介绍
    #sklearn.datasets
    #获取小规模数据集,数据包含在datasets中
    datasets.load_*()
    获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/
    datasets.fetch_*(data_home=None)
    #上述返回的数据类型是datasets.base.Bunch(字典格式)
    

    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(li.data)  #获取特征值
    print('**'*100)
    print(li.target) #获取目标值
    print(li.DESCR)
    print(li.feature_names)
    print(li.target_names)
    

    1.1 数据集的分割

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    li = load_iris()
    #参数:数据集的特征值,目标值,测试集的大小
    #注意返回值,训练集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)
    

    用于分类的大数据集

    from sklearn.datasets import load_iris,fetch_20newsgroups
    from sklearn.model_selection import train_test_split
    news = fetch_20newsgroups(subset='all')
    print(news.data)
    print(news.target)
    

    1.2 转换器与估计器

    • fit_transform():输入数据直接转换;
    • fit_transform=fit()(输入数据,无其他操作)+transform()(进行数据的转换)。
    from sklearn.preprocessing import StandardScaler
    s = StandardScaler()
    #原数据的平均值和标准差转换原数据
    data = s.fit_transform([[1,2,3],[4,5,6]])
    #依据每一列的平均值和标准差
    data1 = s.fit([[1,2,3],[4,5,6],[7,8,9]])
    #以上述的平均值和标准差进行转换,进行归一化处理
    data1 = s.transform([[2,2,3],[7,5,6]])
    print(data1)
    print(data)
    
    

    估计器:在sklearn中,估计器(estimator)是一个重要的角色,分类器和回归器都属于estimator,是一类实现了算法的API。

    首先输入训练数据,然后预测测试数据,然后显示准确率。


    估计器工作流程(图源黑马程序员)
    • 用于分类的估计器:

    sklearn.neighbors k-近邻算法

    sklearn.naive_bayes 贝叶斯

    sklearn.linear_model.LogisticRegression 逻辑回归

    • 用于回归的估计器:

    sklearn.linear_model.LinearRegression 线性回归

    sklearn.linear_model.Ridge 岭回归

    2. KNN算法

    定义:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数的大多数属于某一个类别,则该样本也属于这个类别。

    注:需要做标准化处理,K的取值很重要。

    两个样本之间的距离采用欧式距离进行计算,若a(a_1,a_2,a_3),b(b_1,b_2,b_3)
    \sqrt{{(a_1-b1)}^2+{(a_2-b_2)}^2+{(a_3-b_3)}^2}

    实例处理:

    • 特征值:x,y坐标,定位准确性,时间;
    • 目标值:入住位置id
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import train_test_split
    import pandas as pd
    from sklearn.preprocessing import StandardScaler
    #K近邻算法预测用户签到位置
    def knncls():
    #读取数据
        data = pd.read_csv("train.cav")
        print(data.head(10))
        #数据处理,
        # 1. 缩小数据,query()可进行数据的查询筛选
        data = data.query("x>1.0 & x<1.25 & y>2.5 &y<2.75")
        # 2. 处理时间
        time_value = pd.to_datetime(data('time'),unit = 's')
        #把日期格式转换成字典形式
        time_value = pd.DatetimeIndex(time_value)
        #构造一些新特征
        data['day'] = time_value.day
        data['hour'] = time_value.hour
        data['weekday'] = time_value.weekday
        #删除时间特征
        data.drop(['time'],axis = 1)  #sklearn中列为0,pandas中列为1
        #把签到数量少于n个的目标位置删除
        place_count = data.groupby('place_id').count()
        #reset_index()是还原索引,从新变为默认的整型索引,这里是指将place_id重新变为特征
        tf = place_count[place_count.row_id >3].reset_index()
        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)
        #进行算法流程
        knn = KNeighborsClassifier(n_neighbors=5)
        #输入数据
        knn.fit(x_train,y_train)
        #训练数据
        #预测测试集
        y_predict = knn.predict(x_test)
        #得到准确率
        result = knn.score(y_test,y_predict)
        print('预测的准确率',result)
        return None
    
    if __name__ =='__main__':
        knncls()
    

    KNN总结:

    • 优点:简单,易于理解,易于实现,无需估计参数,无需训练;
    • 缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大;必须指定K值,K值选择不当则分类精度不能保证。
    • 小数据场景,几千~几万样本,具体场景具体业务去测试。

    。。。。。。

    相关文章

      网友评论

          本文标题:机器学习0

          本文链接:https://www.haomeiwen.com/subject/lvbppqtx.html