精华内容
下载资源
问答
  • 收稿日期:2007-07-12基金项目:国家自然科学基金资助(50474033)作者简介:冯少荣(1964-),男,副教授,华南理工大学博士研究生,E-mail:shaorong@xmu.edu.cn.一种提高DBSCAN聚类算法质量的新方法冯少荣1,2,肖文俊1(1....

    收稿日期

    :

    2007

    -

    07

    -

    12

    基金项目

    :

    国家自然科学基金资助

    (

    50474033

    )

    作者简介

    :

    冯少荣

    (

    1964

    -)

    ,

    ,

    副教授

    ,

    华南理工大学博士研究生

    ,

    E

    -

    mail

    :

    s

    haorong

    @

    xmu

    .

    edu

    .

    cn

    .

    一种提高

    DBSCAN

    聚类算法质量的新方法

    1

    ,

    2

    ,

    1

    (

    1

    .

    华南理工大学

    计算机科学与

    工程学院

    ,

    广东

    广州

    510640

    ;

    2

    .

    厦门大学

    信息科学与技术学院

    ,

    福建

    厦门

    361005

    )

    摘要

    :

    对基于密度带有

    噪声

    的空间聚类应用

    (

    DBSCAN

    )

    聚类算法存

    在的

    3

    主要问题

    :

    输入

    参数

    敏感

    对内存要求高

    数据分布不均匀时影响聚类效果

    ,

    提出了

    一种基于遗传方法的

    DBSCA

    N

    算法

    改进

    方案数据分区中

    使

    用遗

    想的

    DBSCAN

    (

    D

    PDG

    A

    )

    聚类

    .

    算法

    K

    -

    means

    算法来获取初始聚类中心

    ;

    对数据

    进行划

    ,

    此基础

    上对划

    分的每

    一部

    分使用

    DBSCA

    N

    进行聚类

    ;

    合并聚类的结果

    .

    仿真实验表明

    ,

    新方法较

    好解决

    了传统

    DBSCA

    N

    类算法

    存在的

    问题

    ,

    聚类效率和聚类效果方面均优于传统

    DBSCA

    N

    聚类算法

    .

    关键词

    :

    聚类算法

    ;

    遗传算法

    ;

    数据划分

    ;

    密度

    中图分类号

    :

    T

    P301

    .

    6

    文献标识码

    :

    A

    文章编号

    :

    1001

    -

    2400

    (

    2008

    )

    03

    -

    0523

    -

    07

    New

    method

    to

    improve

    DBS

    CAN

    clustering

    algorithm

    quality

    FE

    NG

    Shao

    -

    rong

    1

    ,

    2

    ,

    X

    I

    AO

    Wen

    -

    jun

    1

    (

    1

    .

    School

    of

    Computer

    Science

    and

    Engineering

    ,

    South

    China

    U

    niversity

    of

    Technology

    ,

    Guangzhou

    510640

    ,

    China

    ;

    2

    .

    College

    of

    Information

    Science

    and

    Techno

    logy

    ,

    Xiamen

    U

    niv

    .

    ,

    Xiamen

    361005

    ,

    China

    )

    A

    bstract

    :

    T

    here

    are

    three

    pro

    blems

    along

    with

    the

    Density

    Based

    Spatial

    Clustering

    of

    Applications

    with

    Noise

    (

    DBSCA

    N

    )

    Clustering

    A

    lg

    o

    rithm

    :

    input

    sensitivity

    ,

    desire

    fo

    r

    to

    o

    much

    memo

    ry

    space

    and

    the

    effect

    of

    nonunifo

    rm

    da

    ta

    .

    T

    o

    so

    lve

    these

    problems

    ,

    a

    fa

    st

    Da

    ta

    P

    ar

    titio

    n

    DBSCA

    N

    using

    Genetic

    Algo

    rithm

    (

    DPDG

    A

    )

    A

    lgo

    rithm

    is

    develo

    ped

    w

    hich

    considerably

    improv

    es

    the

    cluste

    r

    quality

    .

    Fir

    st

    ,

    the

    G

    ene

    tic

    Algo

    rithm

    is

    used

    to

    impr

    ove

    the

    K

    -

    means

    A

    lg

    orithm

    to

    g

    et

    the

    initial

    clustering

    center

    .

    Second

    ,

    data

    is

    par

    titio

    ned

    and

    the

    DBSCA

    N

    A

    lg

    o

    rithm

    is

    applied

    to

    cluster

    pa

    rtitions

    .

    Finally

    ,

    all

    clustered

    result

    sets

    are

    merg

    ed

    .

    Simulatio

    n

    e

    xperiments

    indicate

    tha

    t

    the

    DPDG

    A

    A

    lg

    orithm

    w

    orks

    w

    ell

    to

    solv

    e

    these

    problems

    and

    tha

    t

    both

    the

    efficiency

    and

    the

    cluster

    quality

    are

    better

    than

    tho

    se

    of

    the

    original

    DBSCA

    N

    A

    lgo

    rithm

    .

    Key

    Words

    :

    clustering

    alg

    orithm

    ;

    g

    enetic

    ;

    da

    ta

    par

    titio

    n

    ;

    density

    带有

    噪声

    的空间聚类应用

    (

    DBSCAN

    )

    算法

    [

    1

    ,

    2

    ]

    是基于密度的聚类方法

    ,

    它要求聚类空间中一定区域

    (

    半径

    ε

    )

    内所包含对象的数目不小于某一给定的阈值

    M

    (

    最小数目

    )

    .

    并且将密度足够大的那部分记录组成

    ,

    它的显著优点是聚类速度快并可以在带有

    噪声

    的空间数据库中发现任意形状的聚类

    .

    但这个算法使

    用了

    ε

    M

    两个全局变量

    ,

    需要由用户主观来选择它们

    ,

    从而影响了最终的聚类结果

    .

    另外

    ,

    该算法需要把

    所有数据载入内存

    ,

    当数据量很庞大时对主存要求较高

    .

    针对

    DBSCAN

    算法存在的不足

    ,

    已有一些改进方

    [

    2

    5

    ]

    ,

    但效果并不理想

    .

    笔者利

    用了遗传

    思想

    ,

    出了一

    种基于

    遗传方

    法的

    DBSCAN

    法改进

    方案

    (

    DPDGA

    )

    来提高聚类质量

    .

    1

    DPDGA

    算法的基本思想

    1

    .

    1

    DPDGA

    算法构造需要考虑的问题

    DPDGA

    算法的构造应考虑如下

    3

    个方面的问题

    .

    2008

    6

    35

    3

    西安电子科技大学学报

    (

    自然科学版

    )

    JOUR

    NAL

    OF

    XIDI

    AN

    UNIV

    ER

    SI

    TY

    Jun

    .

    2008

    Vol

    .

    35

    No

    .

    展开全文
  • 出品:Python数据之道作者:叶庭云整理:Lemon机器学习KNN算法实践预测城市空气质量「Python数据之道」导读: 之前在公众号上分享过 “图解KNN算法” 的内容(点击下面链接...

    出品:Python数据之道

    作者:叶庭云

    整理:Lemon


    机器学习KNN算法实践

    预测城市空气质量

    「Python数据之道」导读: 之前在公众号上分享过 “图解KNN算法” 的内容(点击下面链接前往),今天来分享下使用KNN算法进行案例实践,进一步加深对KNN算法的理解。

    一、KNN算法简介

    KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中常用算法之一,其指导思想是"近朱者赤,近墨者黑",即由你的邻居来推断出你的类别。

    KNN 最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近K个已知样本,再根据少数服从多数的投票法则(majority-voting),将未知样本与K个最邻近样本中所属类别占比较多归为一类

    KNN算法的核心思想:寻找最近的k个数据,推测新数据的分类

    KNN算法的关键:

    • 样本的所有特征都要做可比较的量化 若是样本特征中存在非数值的类型,必须采取手段将其量化为数值。例如样本特征中包含颜色,可通过将颜色转换为灰度值来实现距离计算。

    • 样本特征要做归一化处理 样本有多个参数,每一个参数都有自己的定义域和取值范围,他们对距离计算的影响不一样,如取值较大的影响力会盖过取值较小的参数。所以样本参数必须做一些 scale 处理,最简单的方式就是所有特征的数值都采取归一化处置。

    • 需要一个距离函数以计算两个样本之间的距离 通常使用的距离函数有:欧氏距离、余弦距离、汉明距离、曼哈顿距离等,一般选欧氏距离作为距离度量,但是这是只适用于连续变量。在文本分类这种非连续变量情况下,汉明距离可以用来作为度量。通常情况下,如果运用一些特殊的算法来计算度量的话,K近邻分类精度可显著提高,如运用大边缘最近邻法或者近邻成分分析法。

    以计算二维空间中的 A(x1,y1)B(x2,y2) 两点之间的距离为例,常用的欧氏距离的计算方法如下图所示:

    • 确定 K 的值 K 值选的太大易引起欠拟合,太小容易过拟合,需交叉验证确定K值。

    • KNN 算法的优点:简单,易于理解,易于实现,无需估计参数,无需训练;适合对稀有事件进行分类;特别适合于多分类问题(multi-modal,对象具有多个类别标签), KNNSVM 的表现要好。

    • KNN算法的缺点:KNN算法在分类时有个主要的不足是:当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数。该算法只计算最近的邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。

    • 该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的 K 个最近邻点。可理解性差,无法给出像决策树那样的规则。

    二、KNN算法实现思路

    要自己动手用 Python 实现 KNN 算法,主要有以下三个步骤:

    • 算距离:给定待分类样本,计算它与已分类样本中的每个样本的距离;

    • 找邻居:圈定与待分类样本距离最近的 K 个已分类样本,作为待分类样本的近邻;

    • 做分类:根据这 K 个近邻中的大部分样本所属的类别来决定待分类样本该属于哪个分类;

    三、KNN算法预测城市空气质量

    1. 获取数据

    数据来源:http://www.tianqihoubao.com/aqi/chengdu-201901.html

    对于这种 Table 表格型数据,可以直接用 pandas 的 read_html() 大法,将数据保存到csv,也就不用再写爬虫去解析网页和提取数据了。

    # -*- coding: UTF-8 -*-
    import pandas as pd
    import logging
    
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
    
    for page in range(1, 13):   # 12个月
        if page < 10:
            url = f'http://www.tianqihoubao.com/aqi/guangzhou-20190{page}.html'
            df = pd.read_html(url, encoding='gbk')[0]
            if page == 1:
                df.to_csv('2019年广州空气质量数据.csv', mode='a+', index=False, header=False)
            else:
                df.iloc[1:,::].to_csv('2019年广州空气质量数据.csv', mode='a+', index=False, header=False)
        else:
            url = f'http://www.tianqihoubao.com/aqi/guangzhou-2019{page}.html'
            df = pd.read_html(url, encoding='gbk')[0]
            df.iloc[1:,::].to_csv('2019年广州空气质量数据.csv', mode='a+', index=False, header=False)
    
        logging.info(f'{page}月空气质量数据下载完成!')
    

    多爬取几个城市 2019 年历史空气质量数据保存到本地

    2. 生成测试集和训练集

    首先,我们要对数据进行简单的处理,这里选择两个城市:成都和天津。

    成都

    import pandas as pd
    
    # 将2019年成都空气质量数据作为测试集
    df = pd.read_csv('2019年成都空气质量数据.csv')
    # 取质量等级  AQI指数  当天AQI排名  PM2.5 。。。8列数据
    # SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame 解决方法
    df1 = df[['AQI指数', '当天AQI排名', 'PM2.5', 'PM10', 'So2', 'No2', 'Co', 'O3']].copy()
    
    air_quality = []
    # print(df['质量等级'].value_counts())
    # 质量等级列数据为字符串  转为为标签  便于判断预测
    for i in df['质量等级']:
        if i == "优":
            air_quality.append('1')
        elif i == "良":
            air_quality.append('2')
        elif i == "轻度污染":
            air_quality.append('3')
        elif i == "中度污染":
            air_quality.append('4')
        elif i == "重度污染":
            air_quality.append('5')
     elif i == "严重污染":
            air_quality.append('6')
    
    print(air_quality)
    df1['空气质量'] = air_quality
    
    # 将数据写入test.txt
    # print(df1.values, type(df1.values)) # <class 'numpy.ndarray'>
    with open('test.txt', 'w') as f:
        for x in df1.values:
            print(x)
            s = ','.join([str(i) for i in x])
            # print(s, type(s))
            f.write(s + '\n')
    

    天津

    import pandas as pd
    
    # 自定义其他几个城市空气质量数据作为训练集
    df = pd.read_csv('2019年天津空气质量数据.csv', encoding='utf-8')
    # 取质量等级  AQI指数  当天AQI排名  PM2.5 。。。8列数据
    # SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame 解决方法
    df1 = df[['AQI指数', '当天AQI排名', 'PM2.5', 'PM10', 'So2', 'No2', 'Co', 'O3']].copy()
    
    air_quality = []
    # print(df['质量等级'].value_counts())
    # 质量等级列数据为字符串  转为为数字标识
    for i in df['质量等级']:
        if i == "优":
            air_quality.append('1')
        elif i == "良":
            air_quality.append('2')
        elif i == "轻度污染":
            air_quality.append('3')
        elif i == "中度污染":
            air_quality.append('4')
        elif i == "重度污染":
            air_quality.append('5')
        elif i == "严重污染":
            air_quality.append('6')
    
    print(air_quality)
    df1['空气质量'] = air_quality
    
    # 将数据写入追加写入到train.txt
    # print(df1.values, type(df1.values)) # <class 'numpy.ndarray'>
    with open('train.txt', 'a+') as f:
        for x in df1.values:
            print(x)
            s = ','.join([str(i) for i in x])
            # print(s, type(s))
            f.write(s + '\n')
    

    3. 实现KNN算法

    读取数据集

    def read_dataset(filename1, filename2, trainingSet, testSet):
          with open(filename1, 'r') as csvfile:
              lines = csv.reader(csvfile)  # 读取所有的行
              dataset1 = list(lines)       # 转化成列表
              for x in range(len(dataset1)):  # 每一行数据
                  for y in range(8):
                      dataset1[x][y] = float(dataset1[x][y])   # 8个参数转换为浮点数
                  testSet.append(dataset1[x])    # 生成测试集
    
          with open(filename2, 'r') as csvfile:
              lines = csv.reader(csvfile)  # 读取所有的行
              dataset2 = list(lines)       # 转化成列表
              for x in range(len(dataset2)):   # 每一行数据
                  for y in range(8):
                      dataset2[x][y] = float(dataset2[x][y])  # 8个参数转换为浮点数
                  trainingSet.append(dataset2[x])  # 生成训练集
    

    计算欧氏距离

    def calculateDistance(testdata, traindata, length):  # 计算距离
          distance = 0  # length表示维度 数据共有几维
          for x in range(length):
              distance += pow((int(testdata[x]) - int(traindata[x])), 2)
          return round(math.sqrt(distance), 3)    # 保留3位小数
    

    找K个相邻最近的邻居

    def getNeighbors(self, trainingSet, test_instance, k):  # 返回最近的k个边距
          distances = []
          length = len(test_instance)
          # 对训练集的每一个数计算其到测试集的实际距离
          for x in range(len(trainingSet)):
              dist = self.calculateDistance(test_instance, trainingSet[x], length)
              print('训练集:{} --- 距离:{}'.format(trainingSet[x], dist))
              distances.append((trainingSet[x], dist))
          distances.sort(key=operator.itemgetter(1))  # 按距离从小到大排列
          # print(distances)
          neighbors = []
          # 排序完成后取距离最小的前k个
          for x in range(k):
              neighbors.append(distances[x][0])
          print(neighbors)
          return neighbors
    

    计算比例最大的分类

    def getResponse(neighbors):   # 根据少数服从多数,决定归类到哪一类
          class_votes = {}
          for x in range(len(neighbors)):
              response = neighbors[x][-1]  # 统计每一个分类的多少  空气质量的数字标识
              if response in class_votes:
                  class_votes[response] += 1
              else:
                  class_votes[response] = 1
          print(class_votes.items())
          sortedVotes = sorted(class_votes.items(), key=operator.itemgetter(1), reverse=True)  # 按分类大小排序  降序
          return sortedVotes[0][0]    # 分类最大的  少数服从多数   为预测结果
    

    预测准确率计算

    def getAccuracy(test_set, predictions):
          correct = 0
          for x in range(len(test_set)):
              # predictions预测的与testset实际的比对  计算预测的准确率
              if test_set[x][-1] == predictions[x]:
                  correct += 1
              else:
                  # 查看错误预测
                  print(test_set[x], predictions[x])
    
          print('有{}个预测正确,共有{}个测试数据'.format(correct, len(test_set)))
          return (correct / (len(test_set))) * 100.0
    

    run函数调用

    def run(self):
        training_set = []    # 训练集
        test_set = []        # 测试集
        self.read_dataset('./train_4/test.txt', './train_4/train.txt', training_set, test_set)  # 数据划分
        print('Train set: ' + str(len(training_set)))
        print('Test set: ' + str(len(test_set)))
        # generate predictions
        predictions = []
        k = 7  # 取最近的6个数据
        for x in range(len(test_set)):  # 对所有的测试集进行测试
            neighbors = self.getNeighbors(training_set, test_set[x], k)  # 找到8个最近的邻居
            result = self.getResponse(neighbors)  # 找这7个邻居归类到哪一类
            predictions.append(result)
    
        accuracy = self.getAccuracy(test_set, predictions)
        print('预测准确度为:  {:.2f}%'.format(accuracy))   # 保留2位小数
    

    运行效果如下:

    可以通过增加训练集城市空气质量数据量,调节找邻居的数量k,提高预测准确率。

    作者:叶庭云
    CSDN:https://yetingyun.blog.csdn.net/

    本文来自公众号读者投稿,欢迎各位童鞋向公号投稿,点击下面图片了解详情!

    拓展阅读

    ------- End -------

    点右下角「在看」与转发

    是对我们最大的支持

    特别推荐下公众号「柠檬数据」,会不定期分享数据故事,欢迎来串门。

    回复「600」获取《Python知识手册

    回复「markdown」获取《Markdown速查表

    柠檬数据

    发现数据价值,分享数据故事

    扫码关注,查看更多内容

    展开全文
  • AI派在读学生小姐姐BeyonceJava实战项目练习群长按识别下方二维码,按需求添加扫码添加Beyonce小姐姐扫码关注进Java学习大礼包机器学习KNN算法实践预测城市空气质量「Py...

    AI派在读学生小姐姐Beyonce

    Java实战项目练习群

    长按识别下方二维码,按需求添加

    扫码添加Beyonce小姐姐

    扫码关注

    进Java学习大礼包


    机器学习KNN算法实践

    预测城市空气质量

    「Python数据之道」导读: 之前在公众号上分享过 “图解KNN算法” 的内容(点击下面链接前往),今天来分享下使用KNN算法进行案例实践,进一步加深对KNN算法的理解。

    一、KNN算法简介

    KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中常用算法之一,其指导思想是"近朱者赤,近墨者黑",即由你的邻居来推断出你的类别。

    KNN 最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近K个已知样本,再根据少数服从多数的投票法则(majority-voting),将未知样本与K个最邻近样本中所属类别占比较多归为一类

    KNN算法的核心思想:寻找最近的k个数据,推测新数据的分类

    KNN算法的关键:

    • 样本的所有特征都要做可比较的量化 若是样本特征中存在非数值的类型,必须采取手段将其量化为数值。例如样本特征中包含颜色,可通过将颜色转换为灰度值来实现距离计算。

    • 样本特征要做归一化处理 样本有多个参数,每一个参数都有自己的定义域和取值范围,他们对距离计算的影响不一样,如取值较大的影响力会盖过取值较小的参数。所以样本参数必须做一些 scale 处理,最简单的方式就是所有特征的数值都采取归一化处置。

    • 需要一个距离函数以计算两个样本之间的距离 通常使用的距离函数有:欧氏距离、余弦距离、汉明距离、曼哈顿距离等,一般选欧氏距离作为距离度量,但是这是只适用于连续变量。在文本分类这种非连续变量情况下,汉明距离可以用来作为度量。通常情况下,如果运用一些特殊的算法来计算度量的话,K近邻分类精度可显著提高,如运用大边缘最近邻法或者近邻成分分析法。

    以计算二维空间中的 A(x1,y1)B(x2,y2) 两点之间的距离为例,常用的欧氏距离的计算方法如下图所示:

    • 确定 K 的值 K 值选的太大易引起欠拟合,太小容易过拟合,需交叉验证确定K值。

    • KNN 算法的优点:简单,易于理解,易于实现,无需估计参数,无需训练;适合对稀有事件进行分类;特别适合于多分类问题(multi-modal,对象具有多个类别标签), KNNSVM 的表现要好。

    • KNN算法的缺点:KNN算法在分类时有个主要的不足是:当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数。该算法只计算最近的邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。

    • 该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的 K 个最近邻点。可理解性差,无法给出像决策树那样的规则。

    二、KNN算法实现思路

    要自己动手用 Python 实现 KNN 算法,主要有以下三个步骤:

    • 算距离:给定待分类样本,计算它与已分类样本中的每个样本的距离;

    • 找邻居:圈定与待分类样本距离最近的 K 个已分类样本,作为待分类样本的近邻;

    • 做分类:根据这 K 个近邻中的大部分样本所属的类别来决定待分类样本该属于哪个分类;

    三、KNN算法预测城市空气质量

    1. 获取数据

    数据来源:http://www.tianqihoubao.com/aqi/chengdu-201901.html

    对于这种 Table 表格型数据,可以直接用 pandas 的 read_html() 大法,将数据保存到csv,也就不用再写爬虫去解析网页和提取数据了。

    # -*- coding: UTF-8 -*-
    import pandas as pd
    import logging
    
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
    
    for page in range(1, 13):   # 12个月
        if page < 10:
            url = f'http://www.tianqihoubao.com/aqi/guangzhou-20190{page}.html'
            df = pd.read_html(url, encoding='gbk')[0]
            if page == 1:
                df.to_csv('2019年广州空气质量数据.csv', mode='a+', index=False, header=False)
            else:
                df.iloc[1:,::].to_csv('2019年广州空气质量数据.csv', mode='a+', index=False, header=False)
        else:
            url = f'http://www.tianqihoubao.com/aqi/guangzhou-2019{page}.html'
            df = pd.read_html(url, encoding='gbk')[0]
            df.iloc[1:,::].to_csv('2019年广州空气质量数据.csv', mode='a+', index=False, header=False)
    
        logging.info(f'{page}月空气质量数据下载完成!')
    

    多爬取几个城市 2019 年历史空气质量数据保存到本地

    2. 生成测试集和训练集

    首先,我们要对数据进行简单的处理,这里选择两个城市:成都和天津。

    成都

    import pandas as pd
    
    # 将2019年成都空气质量数据作为测试集
    df = pd.read_csv('2019年成都空气质量数据.csv')
    # 取质量等级  AQI指数  当天AQI排名  PM2.5 。。。8列数据
    # SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame 解决方法
    df1 = df[['AQI指数', '当天AQI排名', 'PM2.5', 'PM10', 'So2', 'No2', 'Co', 'O3']].copy()
    
    air_quality = []
    # print(df['质量等级'].value_counts())
    # 质量等级列数据为字符串  转为为标签  便于判断预测
    for i in df['质量等级']:
        if i == "优":
            air_quality.append('1')
        elif i == "良":
            air_quality.append('2')
        elif i == "轻度污染":
            air_quality.append('3')
        elif i == "中度污染":
            air_quality.append('4')
        elif i == "重度污染":
            air_quality.append('5')
     elif i == "严重污染":
            air_quality.append('6')
    
    print(air_quality)
    df1['空气质量'] = air_quality
    
    # 将数据写入test.txt
    # print(df1.values, type(df1.values)) # <class 'numpy.ndarray'>
    with open('test.txt', 'w') as f:
        for x in df1.values:
            print(x)
            s = ','.join([str(i) for i in x])
            # print(s, type(s))
            f.write(s + '\n')
    

    天津

    import pandas as pd
    
    # 自定义其他几个城市空气质量数据作为训练集
    df = pd.read_csv('2019年天津空气质量数据.csv', encoding='utf-8')
    # 取质量等级  AQI指数  当天AQI排名  PM2.5 。。。8列数据
    # SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame 解决方法
    df1 = df[['AQI指数', '当天AQI排名', 'PM2.5', 'PM10', 'So2', 'No2', 'Co', 'O3']].copy()
    
    air_quality = []
    # print(df['质量等级'].value_counts())
    # 质量等级列数据为字符串  转为为数字标识
    for i in df['质量等级']:
        if i == "优":
            air_quality.append('1')
        elif i == "良":
            air_quality.append('2')
        elif i == "轻度污染":
            air_quality.append('3')
        elif i == "中度污染":
            air_quality.append('4')
        elif i == "重度污染":
            air_quality.append('5')
        elif i == "严重污染":
            air_quality.append('6')
    
    print(air_quality)
    df1['空气质量'] = air_quality
    
    # 将数据写入追加写入到train.txt
    # print(df1.values, type(df1.values)) # <class 'numpy.ndarray'>
    with open('train.txt', 'a+') as f:
        for x in df1.values:
            print(x)
            s = ','.join([str(i) for i in x])
            # print(s, type(s))
            f.write(s + '\n')
    

    3. 实现KNN算法

    读取数据集

    def read_dataset(filename1, filename2, trainingSet, testSet):
          with open(filename1, 'r') as csvfile:
              lines = csv.reader(csvfile)  # 读取所有的行
              dataset1 = list(lines)       # 转化成列表
              for x in range(len(dataset1)):  # 每一行数据
                  for y in range(8):
                      dataset1[x][y] = float(dataset1[x][y])   # 8个参数转换为浮点数
                  testSet.append(dataset1[x])    # 生成测试集
    
          with open(filename2, 'r') as csvfile:
              lines = csv.reader(csvfile)  # 读取所有的行
              dataset2 = list(lines)       # 转化成列表
              for x in range(len(dataset2)):   # 每一行数据
                  for y in range(8):
                      dataset2[x][y] = float(dataset2[x][y])  # 8个参数转换为浮点数
                  trainingSet.append(dataset2[x])  # 生成训练集
    

    计算欧氏距离

    def calculateDistance(testdata, traindata, length):  # 计算距离
          distance = 0  # length表示维度 数据共有几维
          for x in range(length):
              distance += pow((int(testdata[x]) - int(traindata[x])), 2)
          return round(math.sqrt(distance), 3)    # 保留3位小数
    

    找K个相邻最近的邻居

    def getNeighbors(self, trainingSet, test_instance, k):  # 返回最近的k个边距
          distances = []
          length = len(test_instance)
          # 对训练集的每一个数计算其到测试集的实际距离
          for x in range(len(trainingSet)):
              dist = self.calculateDistance(test_instance, trainingSet[x], length)
              print('训练集:{} --- 距离:{}'.format(trainingSet[x], dist))
              distances.append((trainingSet[x], dist))
          distances.sort(key=operator.itemgetter(1))  # 按距离从小到大排列
          # print(distances)
          neighbors = []
          # 排序完成后取距离最小的前k个
          for x in range(k):
              neighbors.append(distances[x][0])
          print(neighbors)
          return neighbors
    

    计算比例最大的分类

    def getResponse(neighbors):   # 根据少数服从多数,决定归类到哪一类
          class_votes = {}
          for x in range(len(neighbors)):
              response = neighbors[x][-1]  # 统计每一个分类的多少  空气质量的数字标识
              if response in class_votes:
                  class_votes[response] += 1
              else:
                  class_votes[response] = 1
          print(class_votes.items())
          sortedVotes = sorted(class_votes.items(), key=operator.itemgetter(1), reverse=True)  # 按分类大小排序  降序
          return sortedVotes[0][0]    # 分类最大的  少数服从多数   为预测结果
    

    预测准确率计算

    def getAccuracy(test_set, predictions):
          correct = 0
          for x in range(len(test_set)):
              # predictions预测的与testset实际的比对  计算预测的准确率
              if test_set[x][-1] == predictions[x]:
                  correct += 1
              else:
                  # 查看错误预测
                  print(test_set[x], predictions[x])
    
          print('有{}个预测正确,共有{}个测试数据'.format(correct, len(test_set)))
          return (correct / (len(test_set))) * 100.0
    

    run函数调用

    def run(self):
        training_set = []    # 训练集
        test_set = []        # 测试集
        self.read_dataset('./train_4/test.txt', './train_4/train.txt', training_set, test_set)  # 数据划分
        print('Train set: ' + str(len(training_set)))
        print('Test set: ' + str(len(test_set)))
        # generate predictions
        predictions = []
        k = 7  # 取最近的6个数据
        for x in range(len(test_set)):  # 对所有的测试集进行测试
            neighbors = self.getNeighbors(training_set, test_set[x], k)  # 找到8个最近的邻居
            result = self.getResponse(neighbors)  # 找这7个邻居归类到哪一类
            predictions.append(result)
    
        accuracy = self.getAccuracy(test_set, predictions)
        print('预测准确度为:  {:.2f}%'.format(accuracy))   # 保留2位小数
    

    运行效果如下:

    可以通过增加训练集城市空气质量数据量,调节找邻居的数量k,提高预测准确率。

    文末福利

    各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

    这个是一份Python代码速查表

    下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

    怎样获取呢?可以添加我们的AI派团队的Beyonce小姐姐

    一定要备注【高清图】

    ????????????????????

    ➕我们的Beyonce小姐姐微信要记得备注【高清图】

    来都来了,喜欢的话就请分享点赞在看三连再走吧~~~

    展开全文
  • 0、优化算法 优化算法是一种根据概率按照固定步骤寻求问题的最优解的过程。常见的优化算法有最传统的梯度下降法(Gradient Descent),在自然特性的基础上模拟个体种群的适应性的遗传算法(Genetic Algorithm,GA)和...
  • 摘要:智能优化算法又称现代启发式算法,是一种具有全局优化性能、通用性强且适合于并行处理的算法。本文主要为大家带来遗传算法和蚁群算法的详细解读。
  • 算法效率

    2021-07-02 13:52:02
    中文名算法效率外文名algorithm efficiency依据程序在计算机上运行消耗时间方法事后统计的方法等类型算法执行时间使用范围计算机程序语言算法效率简介编辑语音算法效率定义算法效率是指算法执行的时间,算法执行时间...
  • 开发多传感器融合算法提高地图的精度; 3. 自动化地图的大规模采集、生成、标注、校验和修订的整个流程; 4. 设计实现实时定位算法,以及对算法定位性能的测试与评估。 任职要求 1. 计算机、自动化、数学等相关...
  • 路径规划算法

    2021-11-14 10:20:44
    文章目录前言一、传统路径规划算法1.Dijkstra算法2.A*算法3.D*算法4.人工势场法二、基于采样路径规划算法1.PRM算法2.RRT算法三、智能仿生算法1.神经网络算法2.蚁群算法3.遗传算法 前言 随着机器人技术、智能控制...
  • 引力搜索算法

    2021-01-20 20:45:37
    引力搜索算法在2009年被首次提出,是一种基于万有引力定律和牛顿第二定律的种群优化算法。该算法通过种群的粒子位置移动来寻找最优解,即随着算法的循环,粒子靠它们之间的万有引力在搜索空间内不断运动,当粒子移动...
  • k8s调度算法整理

    千次阅读 2021-11-28 18:04:40
    算法是带权重的最大最小化公平 分配算法(Max-Min Fair Share Algorithm)[8],是在多种资源 情况下的一种实现,尽量满足容器应用资源请求中的最小 需求,然后将集群中剩余的资源公平地分配给剩下的容器 彭 锋,...
  • 作者丨努力的伍六七@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/395255446编辑丨极市平台导读正如作者所说,做一个算法工程师最重要的素质是在海量的...
  • 传统 Jaya 算法是 Rao 等提出的一种元启发式算法,它基于持续改进的原理,将个体不断向优秀个体靠拢,同时不断远离差的个体,进而不断提高解的质量。传统 Jaya 算法主要基于迭代公式(1),每次通过该方程迭代进化...
  • 3.1 自顶向下的方法 对于这类方法,物体检测是第一步也是至关重要的一步,检测结果的质量直接影响分割的效果。考虑到运行效率,对于室外大规模点云的实例分割一般会采用网格结构来表示点云,并采用类似VoxelNet中...
  • 智能优化算法:学校优化算法 文章目录智能优化算法:...SBO是一种协同优化策略,允许对搜索空间进行广泛的探索,并得到高质量的解决方案。 1.算法原理 SBO是一种多种群元启发式算法,它将单个教师的单课堂教学环境扩展
  • 粒子群算法

    2021-01-22 17:25:28
    研究中发现,在鸟类捕食过程中,个体并不知道如何找到食物以及自身离食物到底有多远,为了找到食物,最有效的搜索方式是搜索离食物源最近的个体的周围区域,这种搜索方式为粒子群算法中信息共享机制提供了生物行为基础。...
  • 模拟退火算法求解最优化问题

    千次阅读 2021-12-11 21:25:56
    1 模拟退火算法理论 1.1 模拟退火算法的起源 1.2 物理退火过程 1.3 模拟退火原理 1.4 模拟退火算法思想 2 实例描述 2.1 TSP旅行商问题 2.1.1 问题描述 2.1.2 解空间 2.1.3 新解的产生 2.1.4 目标函数 2.2...
  • 遗传算法借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种并行、高效、全局搜索的方法。 遗传算法作为一种高效、实用、鲁棒性强的优化技术,发展极为迅速,在机器学习、模式识别、神经网络、控制系统优化及...
  • 2.2.2 计算最优旋转 经过最优平移的推导,我们知道无论旋转如何取值,都可以通过计算点云的质心来得到最优平移,为了下面计算上的简便,我们不妨不考虑平移的影响,先将源点云和目标点云都转换到质心坐标下,这也...
  • 今天给大家介绍一种很有意思的新算法——食肉植物算法(CPA)。 研究中提出了一种新的基于种群的元启发式算法,即肉食植物算法(CPA)。CPA模拟了食肉植物如何适应恶劣环境的生存,如捕食昆虫和传粉繁殖。据我们所...
  • 免疫算法小结及算法实例(附Matlab代码)

    千次阅读 多人点赞 2021-04-20 22:50:50
    1、免疫算法流程 与遗传算法等其他智能优化算法类似,免疫算法的进化寻优过程也是通过算子来实现的。免疫算法的算子包括:亲和度评价算子、抗体浓度评价算子、激励度计算算子、免疫选择算子、克隆算子、变异算子、...
  • 基本粒子群算法小结及算法实例(附Matlab代码)

    千次阅读 多人点赞 2021-04-26 18:49:20
    1、基本粒子群算法 假设在一个 D 维的目标搜索空间中,有 N 个粒子组成一个群落,其中第i 个 粒子表示为一个 D 维的向量: $$ X_i=(x_{i1},x_{i2}, \cdots ,x_{iD}), \quad i=1,2, \cdots ,N \quad \text {(1)} $$...
  • 也正是因为求职者整体水平的提高,招聘算法题的难度也在逐年提升,但还远远达不到竞赛题的水准。这可能是竞赛选手有限的优势所在,即当你适应了竞赛题的难度,再回头看招聘算法题,经过简单的适应之后就是完完全全的...
  • RD成像算法分析

    2021-05-24 01:19:33
    《RD成像算法分析》由会员分享,可在线阅读,更多相关《RD成像算法分析(9页珍藏版)》请在人人文库网上搜索。1、RD成像算法分析摘 要本文是雷达成像原理的第一次课程作业。在此次作业中我完成了对已提供RD算法的...
  • 目录基于布谷鸟与蚁群算法融合的智能优化算法前言一、基本布谷鸟算法二、基本蚁群算法1.引入库2.读入数据三、融合算法1.改进 CS 算法2、基于蚁群更新规则的局部搜索方法四、实验结果和总结 前言 针对标准布谷鸟...
  • 图像去模糊算法代码实践!

    千次阅读 多人点赞 2021-09-25 00:24:53
    以Mobilenetv2为backbone的DeblurGANv2能达到图片实时去模糊的要求,进而可以使用到视频质量增强等方向。 线上训练 如果我们不想把数据集下载到本地的话可以考虑格物钛(Graviti)的线上训练功能,在原项目的基础上...
  • 第二种方式: 上述方法虽然能把地面点提取准确度提高,但是它始终没有解决掉让我们头疼的两个问题:陡坡或者陡坎,低矮物体,因为他们本质上还是以点为对象考虑滤波。所以有学者就提出是否可以对象分割的方式对地面...
  • 算法设计与分析

    2021-07-27 03:21:56
    算法设计与分析课程教学大纲、教学周历课程序号:院(系):计算机科学与工程系课程名称 中文 算法设计与分析英文 The Design and Analysis of Algorithms课程编号 S00901 课程适用学位级别 B专业基础课(硕士)总学时 ...
  • 文章目录前言一、局部搜索算法(local search)二、 爬山法(HILL-CLIMBING)模拟退火(SIMULATED ANNEALING)集束搜索(Beam Search)遗传算法(Genetic algorithm)总结 前言 局部搜索算法简介 ​ 局部搜索算法是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,934
精华内容 62,373
关键字:

为了提高算法的质量