K近邻算法
案例简介
Facebook案例实战:预测一个人会在哪个地方签到,使用K近邻算法进行聚类预测。程序员的任务是返回最可能的位置的排名列表。训练和测试数据集是根据时间划分的,测试数据中的公共/私人排行榜是随机划分的。 此数据集中没有人的概念。 所有row_id都是事件,而不是人
数据特征:
row_id: id of the check-in event 标记事件的id
x y: coordinates 用户的位置
accuracy: location accuracy 定位准确性
time: timestamp
place_id: 地点id,是预测的目标值
代码分析
1、读取数据
2、特征工程,
3、特征处理
4、数据集划分
5、KNN预测
6、输出准确率
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
def knnpre():
"""
K 近邻算法,预测
:return: None
"""
# 读取数据
data = pd.read_csv('./data/train.csv')
# 缩小数据
data = data.query('x>1 & x<1.25 &y>2.5 & y<2.75')
# 转换时间为年月日
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
print(data)
# 把签到数量少于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)]
# 删除无用的特征
data = data.drop(['row_id','time','accuracy'],axis=1)
print(data)
# 数据分割
x = data.drop(['place_id'],axis=1)
y = data['place_id']
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.1)
# 数据标准化
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# KNN算法
knn = KNeighborsClassifier(n_neighbors=5)
# 输入数据拟合模型
knn.fit(x_train,y_train)
# 得到预测结果
y_predict = knn.predict(x_test)
# 得出准确率
print("准确率:",knn.score(x_test,y_test))
knnpre()
朴素贝叶斯
新闻分类案例
1、加载20类新闻数据,并进行分割;2、生成文章特征词;3、朴素贝叶斯estimator流程进行预估
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
def bayes():
"""
朴素贝叶斯分类
:return: None
"""
# 导入数据
news = fetch_20newsgroups(subset='all')
# print(news)
# 进行数据分割
x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.1)
# 对数据集进行特征抽取
tf = TfidfVectorizer()
x_train = tf.fit_transform(x_train)
x_test = tf.transform(x_test)
# 训练朴素贝叶斯
mlt = MultinomialNB(alpha=1.0)
mlt.fit(x_train,y_train)
y_pre = mlt.predict(x_test)
print(mlt.score(x_test,y_test))
bayes()