转换器
估计器(sklearn机器学习算法的实现)
K-近邻算法
KNN核心思想:
根据你的“邻居”推断你的类别
K-近邻算法(KNN)原理
K=1
容易收到异常点的影响
如何确定谁是邻居?
计算距离:
距离公式
曼哈顿距离 绝对距离
明可夫斯基距离
K-邻近算法API
案例1:鸢尾花种类预测
数据集介绍
1获取数据
2数据划分
3特征工程
标准化
4KNN预估器流程
5模型评估
K-近邻总结
模型选择与调优
什么是交叉验证
较差验证目的:为了让被评估的模型更加准确可信
超参数搜索-网格搜索
模型选择与调优API
案例:预测facebok签到位置
import pandas as pd
#获取数据"
data=pd.read_csv("./train.csv")
data.head()
#基本的数据处理
#缩小数据范围
data=data.query("x<2.5&x>2&y<1.5&y>1.0")
data
#2处理时间特征
time_value=pd.to_datetime(data["time"],unit="s")
time_value.values
date=pd.DatetimeIndex(time_value)
date
date.weekday
date.year
date.month
data["day"]=date.day
data["weekday"]=date.weekday
data["hour"]=date.hour
data.head()
#过滤签到次数少的地点
data.groupby("place_id")
data.groupby("place_id").count()
place_count=data.groupby("place_id").count()
place_count=data.groupby("place_id").count()["row_id"]
place_count
place_count>3
place_count[place_count>3]
place_count[place_count>3].head()
data_final=data[data["place_id"].isin(place_count[place_count>3].index.values)]
data_final
data_final.head()
#筛选特征值和目标值
x=data_final[["x","y","accuracy","day","weekday","hour"]]
y=data_final["place_id"]
x.head()
y.head()
#数据集划分
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y)
x_train
x_train,x_test,y_train,y_test=train_test_split(x,y)
x_train
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
#特征工程:标准化
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)
#KNN算法预估器
estimator=KNeighborsClassifier()
#加入网络搜索与交叉验证
#参数准备
param_dict={"n_neighbors":[3,5,7,9]}
estimator= GridSearchCV(estimator,param_grid=param_dict,cv=3)
estimator.fit(x_train,y_train)
#模型评估
#方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
#最佳参数:best_params
print("最佳参数:\n",estimator.best_params_)
#最佳结果:best_score_
print("最佳结果:\n",estimator.best_score_)
#最佳估计器best_estmator_
print("最佳估计器:\n", estimator.best_estimator_)
#交叉验证结果:cv_results_
print("交叉验证结果::\n", estimator.cv_results_)
#好好学习!天天向上!
#今天不学习!明天变废物!
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
def knn_iris():
"""
用KNN算法对鸢尾花进行分类
:return:
"""
#获取数据
iris=load_iris()
#划分数据集
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)
#特征工程;标准化
tranfer= StandardScaler()
x_train=tranfer.fit_transform(x_train)
x_test=tranfer.transform(x_test)
#KNN算法预估器
estimator=KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train,y_train)
#模型评估
#方法1直接比对真实值和预测值
y_predict=estimator.predict(x_test)
print("y_predict:\n",y_predict)
print("直接比对真实值和预测值:\n",y_test==y_predict)
#方法2:计算准确率
score=estimator.score(x_test,y_test)
print("准确率为:\n",score)
return None
#直接比对真实值和预测值
def knn_iris_gscv():
"""
用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证
:return:
"""
#获取数据
iris=load_iris()
#划分数据集
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)
#特征工程;标准化
tranfer= StandardScaler()
x_train=tranfer.fit_transform(x_train)
x_test=tranfer.transform(x_test)
#KNN算法预估器
estimator=KNeighborsClassifier()
#加入网格搜索与交叉验证
#参数准备
param_dict={"n_neighbors":[1,3,5,7,9,11]}
# 模型评估
# 方法1直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
#最佳参数:best_params
print("最佳参数:\n",estimator.best_params_)
#最佳结果:best_score_
print("最佳结果:\n",estimator.best_score_)
#最佳估计器best_estmator_
print("最佳估计器:\n", estimator.best_estimator_)
#交叉验证结果:cv_results_
print("交叉验证结果::\n", estimator.cv_results_)
return None
# 直接比对真实值和预测值
estimator= GridSearchCV(estimator,param_grid=param_dict,cv=10)
estimator.fit(x_train,y_train)
if __name__ == '__main__':
#代码1:用KNN算法对鸢尾花进行分类
# knn_iris()
#代码2:用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证
knn_iris_gscv()