美文网首页
九、k-近邻算法

九、k-近邻算法

作者: 一闪一闪亮日日日日日日 | 来源:发表于2018-10-21 14:38 被阅读0次

    1 简要说明

    背景:各个酒店的住房记录,数据中含有row_id,x,y(x,y给出酒店位置),accurary(酒店定位准确性),time(签到时间),place_id,用k-近邻算法预测进行地点预测
    ps:没找到数据T-T
    首先写出几点步骤:
    1、需要标准化处理
    2、由于数据量大,节省时间,x,y要缩小
    3、时间戳转为(年,月,日,周,时分秒),当做新的特征
    4、几千-几万,少于指定签到人数的位置删除

    2 导入模块

    from sklearn.neighbors import KNeighborsClassifier
    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    

    3 编写函数

    def knn():
        #读取数据
        data = pd.read_csv('train.csv')
        #处理数据
        #1、缩小数据
        data.query('x>1.0 & x<1.25 & y>2.5 & y<2.75')
        #处理时间  
        time_value = pd.to_datetime(data['time'],unit='s')#最小单位为秒
        #把日期格式转为元组,好取里面的‘year’,‘month’,‘day’,‘hour’,‘second’,‘weekday’。。。
        time_value = pd.DatetimeIndex(time_value)
        #3、构造一些特征
        data['day']=time_value.day
        data['hour']=time_value.hour
        data['weekday']=time_value.weekday
        #把时间戳特征time删除
        data=data.drop(['time'],axis=1)
        #把签到数量少于n个目标位置删除
        place_count=data.groupby('place_id').count()
        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)
        print('预测的目标签到位置为:',y_predict)
        #得出测试集上的准确率
        print('预测的准确率',knn.score(x_test,y_test))
    if __name__=='__main__':
        knncls()
    

    4 简单的作业

    对iris数据集进行分析
    首先导入数据

    from sklearn.datasets import load_iris
    iris = load_iris()
    x = iris.data
    y = iris.target
    

    数据划分

    from sklearn.model_selection import train_test_split
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
    

    knn算法

    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import GridSearchCV
    def knncls():
        knn = KNeighborsClassifier(n_neighbors=5)
        knn.fit(x_train,y_train)
        y_predict=knn.predict(x_test)
        print('预测结果:',y_predict)
        score = knn.score(x_test,y_test)
        print('准确性:',score)
    if __name__=='__main__':
        knncls()
    

    输出:
    预测结果: [2 2 0 0 2 0 2 1 2 0 2 1 1 2 2 1 0 2 0 0 0 1 0 0 1 2 1 1 1 2 2 1 1 2 2 2 0
    0]
    准确性: 0.9210526315789473

    相关文章

      网友评论

          本文标题:九、k-近邻算法

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