机器学习##分类算法1-knn

分类算法----目标值是离散型的

###knn邻近算法—标准化处理
knn
定义:如果一个样本特征空间中的K个值最相似(即特征空间中最邻近)的样本中大多数,属于某一个类别,则该样本也属于这个类别
需要:需要标准化,防止值差距太多
api:
knn 距离公式 根号(a1-b1)的平方+(a2-b2)的平方
例子:
目标值:入住位置的id
特征值:x,y坐标,定位准确性,时间,日,时
‘’‘python
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import pandas as pd

def knncls():
“”"
k-进入0,预测用户签到未知
“”"
# 读取数据
data = pd.read_csv(’./bate/train.csv’)
#print(data.head(10))
# 处理数据
# 1.缩小数据,查询数据筛选
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 = data.drop(['time'], axis=1)
print(data)

# 把分组少于n的目标删除
place_count = data.groupby("place_id").count() #以'place_id '分组,且统计次数

tf = place_count[place_count.row_id > 3].reset_index() #row_id>3的,且
data = data[data['place_id'].isin(tf.place_id)]

# 取数据中的目标值,特征值
y = data['place_id']#目标值
x = data.drop(['place_id'], axis=1) #初了y都是特征值

# 进行数据分割
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
print(f"y train length: {len(y_train)}")
print(f'classes: {len(set(y_train))}')
# 特征工程(标准化)
std = StandardScaler()
# 对测试集,训练集的特征值标准化
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)  # ? fit 计算平均值标准差,这里为什么只要transfrom就好



# 进行算法流程
knn = KNeighborsClassifier(n_neighbors=5)

# 得出预测结果
knn.fit(x_train, y_train) # 训练
# 得出预测结果
print(f"test situation: {len(x_test)}")
y_preict = knn.predict(x_test)
print('预测的目标位置:', y_preict)

# 得出准确率
print('得出准确率:', knn.score(x_test, y_test))
return None

if name == ‘main’:
knncls()

’‘’

发布了39 篇原创文章 · 获赞 1 · 访问量 388

猜你喜欢

转载自blog.csdn.net/qq_39441111/article/details/104833251