Чтобы начать работу с Kaggle, достаточно одной статьи! Распознаватель цифр объяснен подробно.

искусственный интеллект

предисловие

В настоящее время существует довольно много вводных туториалов по kaggle, но есть несколько недостатков, некоторые из них относительно старые, и код не может работать в новой версии, что очень сложно для новичков. (Некоторые из них все еще являются кодом py2), некоторые не реализованы с принципами, а с реализацией нет принципов, В общем, хороших вводных руководств не так много. (Не так много средств, здесь я прикрепляю еще один учебник, который, я думаю, хорошо написан в конце статьи. Заинтересованные студенты могут обратиться к нему. Конечно, можно прочитать мою статью напрямую. Я постараюсь включить его содержание, насколько это возможно. , что является обновлением его содержимого, из-за проблем с версией некоторые из его кодов не могут быть запущены напрямую)

О kaggle, разбитых мыслях

В начале я также чувствовал, что kaggle был очень сложным, я чувствовал, что боюсь, что не смогу в этом разобраться, поэтому я все откладывал и отказывался это делать. На самом деле это совершенно ненужно (сложно, но ничего невозможно сделать)

Сначала зайдите на адрес нашего распознавателя цифр:woohoo.cardreform.com/from/digit-zealous…

在这里插入图片描述[Ленивый рак совершил, временно висит, у меня есть время наверстать] Есть не так много моментов, которые KNN может оптимизировать.Видимо, ничего не нужно менять, кроме изменения значения K. Друзья, которые видели этот блог, могут сначала посмотреть справочную ссылку, прикрепленную в конце этой статьи, и обратиться к моему коду на в то же время. В настоящее время результат работы KNN составляет всего 96,3%, что не очень идеально. Прикрепите исходный код:

import pandas as pd
from numpy import mat,tile,array
import numpy as np
import time
import csv,operator

def load_data(filename):
    return pd.read_csv(filename, sep=',', header='infer', names=None, index_col=None, usecols=None)

# 二值化,将0-255中,非0的都修改为1
def to_binary(df):
    dv = df.values
    width = len(dv[0])
    for i in range(1,len(dv)):
        for j in range(1,width):
            if dv[i][j]!= 0:
                dv[i][j] = 1
    return dv

#inX是所要测试的向量
#dataSet是训练样本集,一行对应一个样本。dataSet对应的标签向量为labels
#k是所选的最近邻数目
def classify(inX, dataSet, labels, k):
    # mat method create a matrix
    inX=mat(inX) # test_data, just one sample
    dataSet=mat(dataSet) # train_data
    labels=mat(labels) # the labels of the train_data
    dataSetSize = dataSet.shape[0]
#     此处用一个测试向量,复制n行,(n为训练集的样本数),使得该测试向量与每一个训练向量相减,用于计算最近k邻【构造了dataSetSize*inX行,1*inX列】
    diffMat = tile(inX, (dataSetSize,1)) - dataSet
    sqDiffMat = array(diffMat)**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort() #array.argsort(),得到每个元素的排序序号
    classCount={}                           #sortedDistIndicies[0]表示排序后排在第一个的那个数在原来数组中的下标
    for i in range(k):
        voteIlabel = labels[0,sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

def saveResult(result):
    with open('result.csv','w',newline='') as myFile:
        myWriter=csv.writer(myFile)
        myWriter.writerow(['imageid','label'])
        for i in range(len(result)):
            myWriter.writerow([i+1,str(result[i])])

if __name__ == '__main__':
    print("loading train data...")
    df = load_data("train.csv") # 加载训练数据
    label = df['label'].values
    df = df.drop(['label'],axis=1) # 去除label列
    print("loading test data...")
    dt = load_data("test.csv") # 加载测试样本集,因为测试样本集不含label,可直接取values,提高后续速度
    print("nomalizing...")
    start = time.time()
    db = to_binary(df)  # 二值化
    dt = to_binary(dt) # 对测试集同样进行二值化
    print("training...")
    # print(len(dt))
    dt_len = len(dt)
    resultList = [] #np.empty(dt_len) # 效率比建list 后append 高
    for i in range(dt_len):
        classifierResult = classify(dt[i], db, label, 5)
        # resultList[i] = classifierResult
        resultList.append(classifierResult)
        print(str(i+1)+","+str(classifierResult))
        # print("the classifier came back with: %d" % (classifierResult))
    saveResult(resultList)
    end = time.time()
    print("using time:",end-start)

Ссылка на ссылку:blog.CSDN.net/com 297969586/…