赞
踩
1.基础知识点介绍
曼哈顿距离一般是比欧式距离长的除非在一维空间
拐弯的就是曼哈顿距离
Knn查看前5行数据head(),info看空非空
查看特征对应的类型
Head()默认前5行,head(3)就是前3行数据
Unique()可以查看分类后的结果
csv的数据应该是逗号分隔,但也不确定,要去查看数据不要只看拓展名要点进去看一下
这个删掉没有把原数据删掉
如果把原数据删掉加上inplace=true
- #练习1 导入数据分析三剑客
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- #导入KNN算法
- #sklearn机器学习库,KNeighborsClassifier :KNN分类器
- from sklearn.neighbors import KNeighborsClassifier
-
- ### 1. k-近邻算法原理
- #简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类(K-Nearest Neighbor,KNN)
- ##### 工作原理 **欧几里得距离(Euclidean Distance)**欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。
- knn优缺点
-
- #- 优点:精度高、对异常值不敏感。
- #- 缺点:时间复杂度高、空间复杂度高。
- #### 2. 在scikit-learn库中使用k-近邻算法
- #- 分类问题:from sklearn.neighbors import KNeighborsClassifier
-
- #- 回归问题:from sklearn.neighbors import KNeighborsRegressor
- #导入电影数据
- movie=pd.read_excel('../data/movies.xlsx',sheet_name=1)
- movie
- #中文不可以训练,电影名称从业务的角度也不能拿来训练
- data=movie[['武大镜头','接吻镜头']].copy()
- data #必须是二维数据
- # target (label) 标签,标记,目标结果
- target=movie.分类情况
- target
- data.shape,target.shape
- # 使用KNN算法
-
- # 1. 创建KNN对象
- # n_neighbors=5 : K=5,会找最近的5个近邻
- # p=2:默认值,表示使用欧式距离,p=1表示曼哈顿距离
- knn=KNeighborsClassifier(n_neighbors=5,p=2)
- knn
- # 2. 训练 : 训练历史数据
- # 数据:
- # 训练数据: 用来训练
- # 测试数据:或验证数据,用来测试或验证模型的好坏
-
- # X :必须是二维数据
- # y :结果,一般是一维
- knn.fit(X=data,y=target)
- data
- # 3. 预测新数据
- # 提供测试数据
- X_test=np.arry([[50, 1], [1, 20], [30, 1], [2, 10], [20, 10]])
- X_test=pd.DataFrame(X_test,columns=data.columns)
- y_test=np.array(['动作片', '爱情片', '动作片', '爱情片', '动作片'])
- # 预测:predict
- y_pred=knn.predict(X_test)
- y_pred
- # 4. 计算得分: 准确率
- knn.score(X_test,y_test)
- 总结:# 数据
- # data, target : 一般表示全部数据
-
- # 训练数据
- # X_train : 训练集中的数据
- # y_train :训练集中的数据对应的结果
- #
- # 预测数据
- # X_test : 测试集中的数据
- # y_test : 测试集中的数据对应的真实结果
- # y_pred : 测试集中的数据对应的预测结果

- #from sklearn.datasets:提供现成的数据集,主要用来学习和测试
-
- #导入数据
- import pandas as pd
- import numpy as np
- from sklearn.datasets import load_iris
- from sklearn.neighbors import KNeighborsClassifier
- iris=load_iris()
- iris
- data=iris['data']
- target=iris['target']
- target_names=iris['target_names']
- feature_names=iris['feature_names']
- data.shape,target.shape
- target
- target_names
- feature_names
- pd.DataFrame(data,columns=feature_names)
- #拆分数据集
- from sklearn.model_selection import train_test_split
-
- # test_size 有2种写法:
- # 1. int整数,那么就表示使用这么多的数据作为测试数据
- # 2. float小数,0-1之间,测试数据占所有数据的比重, 比如:0.2 = 150*20% = 20
-
- # 训练数据: X_train, y_train
- # 测试数据: X_test, y_test
- x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
- display(x_train.shape,x_test.shape)
- #使用knn算法knn = KNeighborsClassifier()
- #1.创建knn
- knn=KNeighborsClassifier()
- #2.训练
- knn.fit(x_train,y_train)
- #3.预测
- y_pred=knn.predict(x_test)
- y_pred
- #得分
- knn.score(x_test,y_test)

- #4. 拆分数据集:训练数据和预测数据
- # - train_test_split
- import numpy as np
- import pandas as pd
- #import matplotlib.pyplot as plt
- from sklearn.neighbors import KNeighborsClassifier
- x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
- x_train.shape,x_test.shape
- #使用knn算法
- knn=KNeighborsClassifier()
- knn.fit(x_train,y_train)
- #预测
- knn = KNeighborsClassifier()
- knn.fit(x_train,y_train)
- #预测
- knn.predict(x_test)
- #得分
- knn.score(x_test,y_test)
- #6. 保存训练模型
- # - import joblib
- # - 保存模型: joblib.dump(knn, 'knn.plk')
- # - 导入模型: joblib.load('knn.plk')
- import joblib
- joblib.dump(knn,'knn.plk')
- #导入模型
- new_knn=joblib.load('knn.plk')
- new_knn
- #预测
- new_knn.predict(x_test)

-
- #### 3、癌症预测
- #- 读取cancer.csv文件
- #- 删除列: 'ID'
- #- Diagnosis 是target
- #- 使用train_test_split
- #- 使用KNN训练,并预测
- #- 交叉表查看结果pd.crosstab( )
- import pandas as pd
- import numpy as np
- from sklearn.model_selection import train_test_split
- from sklearn.neighbors import KNeighborsClassifier
- cancer=pd.read_table('../data/cancer.csv')
- cancer.shape
- cancer.head()
- cancer.drop(columns='ID',inplace=True)
- cancer.head(3)
- data=cancer.iloc[:,1:].copy()
- target.unique()
- x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
- #knn
- knn=KNeighborsClassifier()
- knn.fit(x_train,y_train)
- #预测
- y_pred=knn.predict(x_test)
- y_pred
- #得分
- knn.score(x_test,y_test)
- pd.crosstab(
- index=y_pred, #预测结果
- columns=y_test,
- rownames=['预测'],
- colnames=['真实'],
- margins=True
- )

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。