1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > sklearn-分类算法-k近邻(kaggle案例 预测入住酒店位置)

sklearn-分类算法-k近邻(kaggle案例 预测入住酒店位置)

时间:2020-06-03 12:51:50

相关推荐

sklearn-分类算法-k近邻(kaggle案例 预测入住酒店位置)

思想:

计算,预测样本,和其他样本之间的欧式距离,然后欧式距离最短的这些样本的目标值,认为是预测样本的目标值。

欧式距离:对应特征值相减,求平方和再开方

在应用算法 之前 要做标准化。不然值分布在0-1w 范围的特征 对欧式距离的影响太大, 值分布在0-10的特征对距离的影响忽略不计了

api:

from sklearn.neighbors import KNeighborsClassifier

案例:

数据:/c/facebook-v-predicting-check-ins
特征值

row_id , x , y , accuracy, time,

样本序号,x坐标,y坐标,定位准确度,格林威治时间

目标值:

place_id

入住酒店的id

大概流程:

读取csv,

条件筛选: xy 大于0 小于5

定位准确率低于70的 pass

Time转时间戳

时间戳 分离出 年 月日 时分秒

删除时间戳 ,

删除样本序号。

签到次数低于 50次的酒店pass

训练模型

涉及到几个api

格林威治时间是从1970年1月1日开始累计的秒数的总和.

t = 1551966534pd.to_datetime(t, unit='s') 输出:Timestamp('-03-07 13:48:54') # 转为时间戳

时间戳字典的使用,可以把时间戳列表 提取出 年,月,日的部分

import pandas as pddef a():t = ['/3/3','/4/3','/5/3']a = []for i in t:c = pd.to_datetime(i)a.append(c)print(a)time = pd.DatetimeIndex(a)print(time.year)print(time.month)print(time.day)a()

[Timestamp('-03-03 00:00:00'), Timestamp('-04-03 00:00:00'), Timestamp('-05-03 00:00:00')]Int64Index([, , ], dtype='int64')Int64Index([3, 4, 5], dtype='int64')Int64Index([3, 3, 3], dtype='int64')

分组

temp = data.groupby(‘分组依据place_id’).count()

返回值

按照酒店id分组之后,行索引就是 酒店号, 每列的值 就是组内执行count操作的结果

temp.reset_index()

这个函数 执行 把 行索引的值 ,设置为一列特征。

代码部分

import pandas as pdfrom sklearn.neighbors import KNeighborsClassifierdef knn():# 读取数据data = pd.read_csv('../facebook-v-predicting-check-ins/train.csv')# 筛选数据data = data.query('x>0&y>0&x<3&y<3') # 数据集合太大,本地跑用少量data = data[data['accuracy']>50]# 时间戳处理data['time'] = pd.to_datetime(data['time'],unit='s')# 分离时间戳time = pd.DatetimeIndex(data['time'])data['year']=time.yeardata['month'] =time.monthdata['day'] =time.day# 删除data = data.drop(['row_id','time'],axis=1)# 签到次数低于50次的酒店passt = data.groupby('place_id').count()t = t[t.x > 55]t = t.reset_index()data = data[data['place_id'].isin(t['place_id'])]# 划分训练测试集合y = data['place_id']x = data.drop(['place_id'],axis=1)print(x)print(y)x_train,x_test,y_train,y_test = train_test_split(x,y,train_size=0.8)# 开始训练knnc = KNeighborsClassifier(n_neighbors=5) # 设置5个相邻样本knnc.fit(x_train,y_train)predict =knnc.predict(x_test)score = knnc.score(x_test,y_test)print(score)knn()

结果, 太慢了 该算法 只适合 小规模数据,

x y accuracy year month day12 0.8829 1.3445 64 19701 718 2.7256 1.0135 54 19701 139 1.2191 1.3462 743 19701 654 1.9264 0.2691 64 19701 382 2.9265 2.3590 55 19701 5···[1576366 rows x 6 columns]127652380351188936085695396171384989···

案例2 :

sklearn ,自带数据集合 iris 预测 鸢尾花的品种

from sklearn.datasets import load_irisfrom sklearn.neighbors import KNeighborsClassifierdef knn2():iris = load_iris()x = iris.datay = iris.targetprint(iris.feature_names)print(x)print(iris.target_names)print(y)x_train, x_test, y_train, y_test = train_test_split(x,y,train_size=0.832)knnc = KNeighborsClassifier(n_neighbors=5)knnc.fit(x_train,y_train)predict = knnc.predict(x_test)score = knnc.score(x_test,y_test)print(predict)print(score)knn2()

[0 1 0 2 1 2 1 2 2 1 2 0 0 0 2 1 2 2 1 1 2 1 0 2 0 2]1.0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。