ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python爬虫---散点图和KNN预测

2019-10-29 15:53:24  阅读:423  来源: 互联网

标签:KNN city plt python 模型 散点图 feature 算法 数据


散点图和KNN预测

一丶案例引入

#  城市气候与海洋的关系研究
#  导包
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

import matplotlib.pyplot as plt
%matplotlib inline  # 使用画图模块时,jupyter工具需要声明


from pylab import mpl    #  mpl 提供画图的包
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题


#  导入数据
ferrara1 = pd.read_csv('./ferrara_150715.csv')
ferrara2 = pd.read_csv('./ferrara_250715.csv')
ferrara3 = pd.read_csv('./ferrara_270615.csv')
# 拼接数据,忽略索引
ferrara=pd.concat([ferrara1,ferrara2,ferrara3],ignore_index=True)


#  去除没用的列
faenza.head()

city_list=[ferrara,torino,mantova,milano,ravenna,asti,bologna,piacenza,cesena,faenza]
for city in city_list:
    # 删除 没用的列,inplace:作用在源数据上
    city.drop(labels='Unnamed: 0',axis=1,inplace=True)
    
# 显示最高温度于离海远近的关系(观察多个城市)    
max_temp = [] #10个城市的最高温度
cities_dist = [] #10个城市距离海洋的距离

for city in city_list:
    max_temp.append(city['temp'].max())
    cities_dist.append(city['dist'].max())
# 在方程式中:
    x:自变量
    y:因变量
    y = 5x + 4
    自变量的变化会导致因变量的变化
# 画散点图, scatter(x,y,c):
    # 注意: x是自变量, y是因变量.  距离是自变量,最高温度是因变量. rbyg是
plt.scatter(cities_dist,max_temp,c='rbyg')  
plt.xlabel('距离')
plt.ylabel('最高温度')
plt.title('距离和最高温度之间的关系图')

二丶机器学习的概念

# 机器学习(ML)和人工智能之间的关系是什么?
    机器学习是实现人工智能的一种技术手段
# 什么是算法模型(model或者m)?
    特殊的对象。特殊之处就在于该对象内部集成了某一种还没有求出解的方程。
# 算法模型的作用?
    实现预测:预测出一个未知的结果
    实现分类:将一个未知分类的事务归类到已知的类群中
    重点:算法模型中的方程的解就是预测或者分类的结果

#样本数据
    作用:将样本数据带入到算法模型中让其内部的方程有解。至此算法模型就可以实现分类或者预测的功能。
    训练模型:将样本数据带入到算法模型中让其内部的方程有解。只有训练好的算法模型才可以实现分类或者预测的功能!
    
    组成部分:
        特征数据:自变量    
        目标数据:因变量

#sk-learn库:封装了大量的算法模型

# 模型的分类:
    有监督学习:如果模型需要的样本数据必须包含特征数据和目标数据
    无监督学习:如果模型需要的样本只需要有特征数据
# 导入sklearn,建立线性回归算法模型对象
    # 该模型内部封装的是一个线性方程:y = wx + b
    
### 1. 提取样本数据 (特征数据,目标数据)

    feature = np.array(cities_dist)  #特征数据 
    feature = feature.reshape(-1, 1) #二维形式的特征数据(reshape把数据变形,训练的数据必须是二维)
    target =  np.array(max_temp)     #目标数据
    
    
### 2. 训练模型调用的方法是fit(X,y),y任意形式(维度)的目标数据,X表示的必须是二维的特征数据
    #1.选择一个模型对象进行实例化
    from sklearn.linear_model import LinearRegression
    # 实例化一个 线性回归对象
    linner = LinearRegression()
   
    #2.训练模型(注意:训练模型的数据必须是二维)
    linner.fit(feature,target) #X,y
    
    #3.使用相关的评价指标来评价模型
    linner.score(feature,target)
    #4.实现预测
    linner.predict([[222],[333]]) 
    
    
#### 3. 画出回归曲线
x = np.linspace(0,350,num=100)  # x 生成100个随机数
y = linner.predict(x.reshape(-1,1)) 

# 画出散点图
plt.scatter(cities_dist,max_temp,c='rbyg')

plt.xlabel('距离')
plt.ylabel('最高温度')
plt.title('距离和最高温度之间的关系图')
# 
plt.scatter(x,y)    

三丶k-近邻算法(KNN)

k-近邻算法原理

# 简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类。

    # 优点:精度高(计算距离)、对异常值不敏感(单纯根据距离进行分类,会忽略特殊情况)、无数据输入假定(不会对数据预先进行判定)。
    # 缺点:时间复杂度高、空间复杂度高。
    # 适用数据范围:数值型和标称型。
    

欧几里得距离(Euclidean Distance)

# 欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:

案例一:

需求:预测年收入是否大于50K美元

# 读取adult.txt文件,最后一列是年收入,并使用KNN算法训练模型,然后使用模型预测一个人的年收入是否大于50


# 1.  读取数据
    data = pd.read_csv('../data/adults.txt')
    data.head()
 


# 2. 获取年龄、教育程度、职位、每周工作时间作为机器学习数据 获取薪水作为对应结果    
    feature = data[['age','education_num','occupation'
                    ,'hours_per_week']]
    target = data['salary']
    
    
# 3. knn中特征数据是需要参与运算的,所以要保证特征数据必须为数值型的数据 
     # 数据转换,将String类型数据转换为int
     #### map方法,进行数据转换
        
    dic = {}
    # unique()方法保证数据唯一
    occ_arr = feature['occupation'].unique()
    # 生成 字符对应数字的 关系表
    for i in range(occ_arr.size):
        dic[occ_arr[i]] = i  

# 数值替换字符串        
feature['occupation'] = feature['occupation'].map(dic)    
    
    
    
# 4. 切片:训练数据和预测数据  

    # 查看数据的形状 (训练的数据必须是二维数据)
    feature.shape
    
#训练数据
x_train = feature[:32500]
y_train = target[:32500]

#测试数据
x_test = feature[32500:]
y_test = target[32500:]   


# 5. 生成算法
from sklearn.neighbors import KNeighborsClassifier
 # 实例化一个 knn对象, 
    # 参数:n_neighbors可调,调到最终预测的是最好的结果.
knn = KNeighborsClassifier(n_neighbors=10)
    # fit() 训练函数, (训练数据,训练数据的结果)
    knn.fit(x_train,y_train)
    
    # 对训练的模型进行评分 (测试数据,测试数据的结果)
    knn.score(x_test,y_test)
    
    
# 6.预测数据
print('真实的分类结果:',np.array(y_test))
print('模型的分类结果:',knn.predict(x_test))

标签:KNN,city,plt,python,模型,散点图,feature,算法,数据
来源: https://www.cnblogs.com/dengl/p/11759185.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有