Шаг за шагом, приступаем к машинному обучению за выходные

машинное обучение Python алгоритм модульный тест
Шаг за шагом, приступаем к машинному обучению за выходные

Управляемое чтение


Когда несколько месяцев назад я начал заниматься машинным обучением, столкнувшись с кучей видеороликов на английском языке и основами математики, я стиснул зубы и попытался использовать машинное обучение в SideProject.

​ Оглянувшись на дорогу вперед, я обнаружил, что иду на ощупь по лесной тропе с множеством ям и извилистых дорог. Когда я прибыл сюда, я обнаружил, что это не должно быть таким трудным и трудоемким. Большинство программистов которые начинают или планируют начать, и которые перешли от начала к сдаче.

​Эта серия статей предназначена для всех, кто интересуется машинным обучением. Она не требует математической основы. Она стремится начать с необоснованной точки зрения и практики, чтобы каждый мог понять простейший процесс машинного обучения за несколько дней. характер книги применяется к работе или личным проектам для решения некоторых простых, но громоздких практических задач, тем самым закладывая основу для дальнейшего углубленного изучения.

содержание


  • основная теория
    • О машинном обучении
    • что такое машинное обучение
    • процесс машинного обучения
    • классификация машинного обучения
  • Hello World
    • Строительство окружающей среды
    • цель обучения
    • подготовка данных
    • Обучите модель
    • сохранить модель
    • Самоанализ
  • First App
    • цель обучения
    • Преобразование модели
    • Импорт модели
    • начать кодирование
    • результат операции
  • Суммировать
    • резюмировать
    • что ты пропустил
    • Что насчет следующего




Темную PDF-версию можно скачать отсюда:

step_by_step_machine_learning_v1.0.0_by_AntScript.pdf (1.7MB)




основная теория


О машинном обучении

Оглядываясь назад на историю, когда технологии развиваются до определенного уровня, они, вероятно, окажут значительное влияние на развитие и изменение общества.

  • Первая научно-техническая революция, с развитием паровых двигателей, добычи угля, стали и других технологий, привела к тому, что люди в больших масштабах заменили производство человеческой и животной силы машинами;
  • Вторая научно-техническая революция с широкомасштабным применением электричества значительно способствовала развитию производительности;
  • Третья научно-техническая революция, с развитием информационных технологий, человечество вступило в век цифровой информации.

В настоящее время высота академических исследований и производительность оборудования, вероятно, сделают машинное обучение началом четвертой технологической революции.

Когда-то умелые мастера могут только вздыхать перед качеством и эффективностью средств автоматизации, а теперь люди, которые находятся на вершине мира Go, AlphaGo может победить их всего за 3 дня самообучения.

Поэтому суть машинного обучения, по сути, такая же, как у паровых двигателей и электричества: это технология, технология, которая может расширить ограничения человека.

Например, чтобы водить машину, вам не нужно понимать все принципы работы автомобиля.Пока вы изучаете навыки вождения и имеете водительские права, вы можете использовать автомобиль, чтобы преодолеть ограничения собственной скорости и физической силы. , и достичь расстояния, которое раньше было недостижимо пешком за короткое время; машина То же самое относится и к обучению. Вам не нужно изучать все соответствующие теоретические знания. Пока вы освоили определенные концепции и процессы, вы можете использовать это для того, чтобы сломать ограничения вашего собственного мозга и найти решения проблем, до которых ваш собственный интеллект не мог добраться раньше.

Конечно, водители, которые могут ремонтировать автомобили, могут найти и решить проблемы, когда в машине есть проблемы.Эти водители, которые могут ремонтировать автомобили, позже становятся экспертами в автомобилях; чтобы стать экспертами в области машинного обучения, нужно не только научиться пользоваться, но и иметь глубокое понимание того, как это работает, и иметь возможность настраивать и улучшать его.

Эта статья посвящена пониманию того, как использовать машинное обучение без учета принципов, лежащих в его основе.Без использования какой-либо технологии распознавания изображений, благодаря разработке приложения для распознавания рукописных цифр, мы можем почувствовать больше возможностей, предоставляемых машинным обучением.

что такое машинное обучение

Говоря абстрактно, машинное обучение — это анализ старых данных для автоматического обобщения методов, которые могут предсказывать результаты в новых условиях.

human_learning

computer_learning

считать

Разница между машинным обучением и человеческим обучением, а также преимущества и недостатки каждого из них.

процесс машинного обучения

Давайте сначала подумаем о том, на что похож наш человеческий процесс обучения:

Фотограф природных пейзажей, снимающий и кадрирующий на природе круглый год, за годы наблюдений и накоплений, он стал хорошим предсказателем погоды.

И как компьютеры стали экспертами по прогнозированию погоды? Введя большое количество исторических данных, проанализировав и сравнив, я нашел закономерность, результаты прогноза погоды неразделимы, а показатель точности выше, чем у фотографа.

считать

Их сходство в том, что все они требуют накопления опыта, а разница в том, что людям требуются годы или даже десятилетия, чтобы стать экспертами в определенной области, в то время как машины могут достичь или превзойти людей за короткий промежуток времени, если они достаточно данных.

классификация машинного обучения

На данный момент нас интересуют только два типа машинного обучения:предсказыватьиКлассификация.

Классификация

Результат классификации является дискретным, или это тип перечисления, такой как изображение, признано, что это 1 кошка, 2 собаки и ни 3. В результате 3 перечисления, поэтому он принадлежит к классификации

предсказывать

По отношению к классификации результат прогнозирования (или линейной регрессии) является непрерывным.В определенной точке интервала, например, заданной дате и рейсе, прогнозируется цена авиабилета, и его результат находится в диапазоне от 0 до положительная бесконечность (от 0 до положительной бесконечности. Теоретически говоря) на одну точку выше открытого интервала.

prediction

Суммировать

Обзор процесса машинного обучения

computer_learning

  • Во-первых, необходимо собрать достаточно данных;
  • Затем компьютер должен каким-то образом проанализировать и изучить данные;
  • Наконец, машины способны предсказывать или классифицировать.

Являются ли следующие проблемы классификацией или предсказанием?

  • По историческим записям просмотра и покупок пользователя судят, купит ли он определенный продукт.
  • Автоматически помечайте загруженные пользователем изображения.
  • Прогноз индекса PM2.5 на завтра

В следующей главе мы познакомимся с машинным обучением, которое требует элементарных навыков программирования.



Hello World


Строительство окружающей среды

Anaconda

Anaconda — очень удобный инструмент/среда интеграции Python для анализа данных, включая большинство инструментов/пакетов, используемых для анализа данных, и поддерживает Mac, Windows и Linux. Нам просто нужно установить это программное обеспечение.

Если вы уже знакомы с разработкой Python, вы можете перейти к следующему разделу.

Скачайте Anaconda (если вы не знаете разницы между версиями, рекомендуется установить версию Python 3.6)www.anaconda.com/download

Установка Mac может использовать конфигурацию по умолчанию, Windows необходимо вручную выбрать переменную среды конфигурации.

Когда закончите, запустите Anaconda Navigator.

Запуск блокнота Jupyter автоматически откроет веб-страницу на локальном сервере и войдет в папку AnacondaProjects.

Создайте новый файл Python3:

Недавно открывшаяся страница представляет собой интерактивную среду программирования Python, где вы можете запускать код и выводить результаты в режиме реального времени, что очень удобно.

Все готово, можно приступать к кодированию. Следующие операции все в среде Mac. Остальные среды аналогичны. Если есть какие-то отличия, пожалуйста, погуглите сами.

цель обучения

В этом разделе мы сначала обучаем модель, которая распознает рукописные цифры, а затем сохраняем модель.

Это первый шаг в самом упрощенном наборе процессов для применения машинного обучения на практике и самый важный шаг в применении машинного обучения на практике, дающий нам представление об одной из самых важных концепций машинного обучения:тренироваться, иметь базовое понимание.

подготовка данных

Вы можете ввести следующий код блок за блоком в интерактивной среде, Shift + Enter для запуска.

Как упоминалось в предыдущей главе, первым шагом в машинном обучении является сбор данных, и мы будем использовать этот собранный набор данных.

библиотека функций импорта

import matplotlib.pyplot as plt
from sklearn import datasets, svm
  • matplotlib.pyplot: используется для отображения изображения
  • sklearn.datasets: Содержит большое количество наборов данных машинного обучения различных типов.
  • sklearn.svm: SVM (Support Vector Machine) машина опорных векторов, алгоритм в машинном обучении
  • sklearn.metrics: используется для оценки точности модели

Скачать данные

digits = datasets.load_digits()
  • load_digits(): набор рукописных цифр, включенный в sklearn, который можно рассматривать как Hello World в машинном обучении.

Информация о данных

  • images: матричный двумерный массив 8x8, в котором хранятся изображения значений рукописных цифр.
  • data: сведение матрицы изображений в одномерный массив из 64 элементов.
  • target: число, представленное каждой матрицей на изображениях, 0–9.
  • target_names: метка цели

Вы можете ознакомиться со структурой всех данных, выведя по одному

len(digits.images)
digits.images[5]
digits.data[5]
digits.target[5]
digits.target_names[5]

Далее мы определяем функцию, которая может отображать данные графически.

def show_image(image, label):
    plt.figure(1, figsize=(3, 3))
    plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
    plt.title(label)
    plt.show()

Теперь мы можем использовать эту функцию для более интуитивного отображения данных и попробовать отобразить несколько

show_image(digits.images[5], digits.target[5])

Обучите модель

Данные готовы, можно приступать к обучению модели

# 对数据进行分割,使用2/3的数据进行训练,1/3的数据进行测试
# train_test_split是sklearn提供的一个用于分割数据的函数
# X_train : 训练用的图片数据
# y_train : 训练用的已分类的图片类别
# X_train : 测试用的图片数据
# y_train : 测试时用于对比测试结果的已分类图片类别
X = digits.data
y = digits_dataset.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

# 初始化一个SVC(Support Vector Classification)分类器
classifier = svm.SVC(gamma=0.001)

# 使用训练数据进行训练
classifier.fit(X_train, y_train)

# 查看模型在测试数据上的预测准确度
classifier.score(X_test, y_test)
# 0.96327212020033393

# 对比下前20个中的预测结果
predicted = classifier.predict(y_test[:20])
print(predicted)
print(testing_target[:20])

# 20个中有一个错误,准确率95%,还是基本符合上面0.963的准确率

  • Данные обучения и данные теста не могут перекрываться, точно так же, как мы обычно обучаем нас отвечать на множество реальных вопросов, а вопросы, которые появляются на экзамене, — это все вопросы, которые уже были заданы, поэтому они не могут очень точно отражать наш реальный уровень. Что ж.

сохранить модель

Данные для обучения, которые мы использовали выше, представляют собой небольшой набор данных, и обучение модели завершается быстро, но в реальной среде данные для обучения, как правило, очень велики, и обучение не может быть завершено быстро.Это занимает десятки минут, часов, или даже дней. Поэтому нам нужно сохранить обученную модель для следующего использования.

sklearn уже включает модуль joblib для сохранения моделей

from sklearn.externals import joblib

спасти

joblib.dump(classifier, 'digits.pkl')

читать

classifier = joblib.load('digits.pkl')

Самоанализ

  • Как использовать наборы данных в sklearn
  • Как обучить модель с данными
  • Как сохранить обученную модель



First App


цель обучения

В этом разделе модель, экспортированная в предыдущем разделе, будет использоваться в нашем проекте iOS для разработки приложения, которое может распознавать рукописные цифры, делая снимки с помощью камеры.

Примеры, разработанные в этом разделе, основаны на iOS.Если вы являетесь разработчиком других платформ, вы можете обратиться к соответствующей информации и применить модель к знакомой вам платформе.

Преобразование модели

Начиная с iOS11, библиотека CoreML, запущенная Apple, поддерживает машинное обучение, что позволяет легко интегрировать обученную модель в проект Xcode, но предпосылка заключается в том, что обученную модель необходимо преобразовать в формат (.mlmodel), поддерживаемый Xcode.

Использование Python2

Преобразование модели выполняется с помощью инструмента на основе Python, предоставленного Apple.coremltools, но в настоящее время поддерживает только Python 2. Если вы используете 3, вам также необходимо установить модуль, поддерживающий 2, и запустить его непосредственно в командной строке:

python2 -m pip install ipykernel
python2 -m ipykernel install --user
Ссылка на ссылку stackoverflow.com/questions/3…

После завершения установки создайте новый файл Python2:

Поскольку мы использовали модель, экспортированную Python3 в предыдущем разделе, ее нельзя прочитать напрямую в Python2, поэтому нам нужно сделать это снова на Python2 (не копируйте и не запускайте ее напрямую, напишите ее самостоятельно):

from sklearn import datasets, svm
from sklearn.model_selection import train_test_split

digits = datasets.load_digits()

# 对数据进行分割,使用2/3的数据进行训练,1/3的数据进行测试
# train_test_split是
# X_train : 训练用的图片数据
# y_train : 训练用的已分类的图片类别
# X_train : 测试用的图片数据
# y_train : 测试时用于对比测试结果的已分类图片类别
X = digits.data
y = digits.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

# 初始化一个SVC(Support Vector Classification)支持向量机分类器
classifier = svm.SVC(gamma=0.001)

# 使用训练数据进行训练
classifier.fit(X_train, y_train)

# 查看模型在测试数据上的预测准确度
score = classifier.score(X_test, y_test)
print(score)
# 0.96327212020033393

# 保存模型
joblib.dump(classifier, 'digits.pkl')

Вы можете спросить, почему бы просто не использовать Python2?

  • Перепишите код для проверки
  • Самостоятельно проверьте информацию, чтобы узнать больше о разнице между Python 2 и 3.
  • Python3 — это будущее, возможно, coremltools уже поддерживает его, когда вы его увидите.

конвертировать

Сначала установите coremltools в командной строке.

pip install -U coremltools

Теперь мы можем преобразовать сохраненную модель в формат, поддерживаемый Xcode:

from sklearn.externals import joblib
import coremltools

# 读取训练好的模型
classifier = joblib.load('digits.pkl')

# 生成模型的输入参数名称,总共有64个参数,所以我们生成的参数名称如下
# feature_0, feature_1 ... feature_63
feature_names = ["feature_"+str(i) for i, x in enumerate(X_train[0])]

# 将模型转换为coreml的格式,并保存下来
coreml_model = coremltools.converters.sklearn.convert(classifier, feature_names, "digit")
coreml_model.save("digits.mlmodel")

Теперь вы можете увидеть файл digits.mlmodel в списке.После нажатия на него он откроется на новой странице.Поскольку это особый формат, его нельзя предварительно просмотреть.Выберите Файл -> Загрузить, чтобы загрузить его.

  • Проверьте файл Digits.mlmodel, он весит около 400 КБ.
  • Не щелкайте правой кнопкой мыши, чтобы сохранить в списке, это загрузит файл всего с 8Кб (я потратил много времени на эту яму)
  • также доступен вcoreml_model.saveПри непосредственном использовании локального пути для его хранения (например,/Users/[Your-Name]/Downloads/digits.mlmodel)

Импорт модели

Создайте новый проект iOS в Xcode, перетащите файл, сохраненный в предыдущем разделе, в проект, Xcode автоматически проанализирует и выведет интерфейс модели:

Мы видим, что выход модели представляет собой 64-битное целое число типа Int64 (на самом деле только 0-9, представляющее результат цифрового распознавания), расширьте входные данные:

Ввод feture0 - feature_63 с 64 двойными параметрами, вы должны подумать: функция имеет 64 параметра, требуется много времени, чтобы написать имя параметра!

Да, так что придумайте способ оптимизировать параметры, чтобы было удобнее пользоваться, пока воспользуемся им в первую очередь.

начать кодирование

Что нам нужно предсказать, так это изображение, и входными параметрами являются 64 двойника, эти 64 двойника являются значением серого каждой точки растрового изображения 8 * 8, поэтому мы должны сначала преобразовать изображение в 64 двойника, думая, что бы вы сделали если бы?

Вот мои мысли:

  • Сначала сделайте снимок камерой
  • Уменьшите фото до 8*8 с общим размером 64 пикселя.
  • Преобразование фотографий в оттенки серого
  • Преобразуйте значение оттенков серого каждого пикселя в Double
  • Наконец, для ввода доступно 64 значения типа Double.

Непосредственный код (меньше кода, все написано наViewController.swiftвнутри):

import SwifterSwift // 使用了SwifterSwift来简化颜色的操作

// 从一个UIColor中取出灰度值
// (0.0 - 1.0)
// 0.0 -> 最白 1.0 -> 最黑
extension UIColor {
    func getGray() -> Double {
        let rgb = self.rgbComponents
        // 灰度值的一种算法,red * 0.3 + green * 0.59 + blue * 0.11
        var gray = (
            rgb.red.double * 0.3
            +
            rgb.green.double * 0.59
            +
            rgb.blue.double * 0.11
        ).int
        // 设定与一个阈值,以降低光线或背景的影响
        if gray >= 200 {
            gray = 255
        }

        return (255 - gray.double) / 255
    }
}
// 从UIImage中取出某个像素点的UIColor
extension UIImage {
    func getPixelColor(pos: CGPoint) -> UIColor? {

        guard let pixelData = self.cgImage?.dataProvider?.data else {
            return nil
        }
        let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

        let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4

        let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
        let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
        let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
        let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)

        return UIColor(red: r, green: g, blue: b, alpha: a)
    }
}
// 对模型进行扩展,将参数封装,以方便调用
extension digits {
  // 封装模型的预测方法,使用一个8*8的UIImage作为参数,方便调用
  func prediction(image: UIImage) -> Int64? {
        var data: [Double] = []
        for y in 0..<Int(image.size.height) {
            for x in 0..<Int(image.size.width) {
                guard let c = image.getPixelColor(pos: CGPoint(x: x, y: y)) else {
                    break
                }
                data.append(Double(15 - Int(c.getGray().double/16)))
            }
        }
        return prediction(data: data)
    }
  	// 封装一下模型的预测方法,把64个参数封装在一个数组里,方便调用
    func prediction(data: [Double]) -> Int64? {
        guard data.count == 64 else {
            return nil
        }

       if let result = try? prediction(
            feature_0: data[0],
            feature_1: data[1],
            feature_2: data[2],
            feature_3: data[3],
            feature_4: data[4],
            feature_5: data[5],
            feature_6: data[6],
            feature_7: data[7],
            feature_8: data[8],
            feature_9: data[9],
            feature_10: data[10],
            feature_11: data[11],
            feature_12: data[12],
            feature_13: data[13],
            feature_14: data[14],
            feature_15: data[15],
            feature_16: data[16],
            feature_17: data[17],
            feature_18: data[18],
            feature_19: data[19],
            feature_20: data[20],
            feature_21: data[21],
            feature_22: data[22],
            feature_23: data[23],
            feature_24: data[24],
            feature_25: data[25],
            feature_26: data[26],
            feature_27: data[27],
            feature_28: data[28],
            feature_29: data[29],
            feature_30: data[30],
            feature_31: data[31],
            feature_32: data[32],
            feature_33: data[33],
            feature_34: data[34],
            feature_35: data[35],
            feature_36: data[36],
            feature_37: data[37],
            feature_38: data[38],
            feature_39: data[39],
            feature_40: data[40],
            feature_41: data[41],
            feature_42: data[42],
            feature_43: data[43],
            feature_44: data[44],
            feature_45: data[45],
            feature_46: data[46],
            feature_47: data[47],
            feature_48: data[48],
            feature_49: data[49],
            feature_50: data[50],
            feature_51: data[51],
            feature_52: data[52],
            feature_53: data[53],
            feature_54: data[54],
            feature_55: data[55],
            feature_56: data[56],
            feature_57: data[57],
            feature_58: data[58],
            feature_59: data[59],
            feature_60: data[60],
            feature_61: data[61],
            feature_62: data[62],
            feature_63: data[63]
        ) {
            return result.digit
        }
        return nil
    }
}
// UI
// 使用一个按钮打开摄像头进行拍照,拍照完成后把图片处理成8*8像素,显示出来,然后用一个Label显示预测结果)
let pickImageButton = UIButton(type: UIButtonType.roundedRect)
let resultLabel = UILabel(text: "no result")
let imageView = UIImageView()

override func viewDidLoad() {
	super.viewDidLoad()

  	pickImageButton.frame = CGRect(x: 0, y: 0, width: 100, height: 50)
    pickImageButton.setTitle("Pick Image", for: .normal)
    view.addSubview(pickImageButton)
    pickImageButton.addTarget(self, action: #selector(startPickImage(sender:)), for: UIControlEvents.touchUpInside)

    resultLabel.frame = CGRect(x: 300, y: 200, width: 100, height: 50)
    view.addSubview(resultLabel)

    imageView.frame = CGRect(x: 50, y: 300, width: 256, height: 256)
    imageView.contentMode = .scaleAspectFill
    view.addSubview(imageView)
}
// 实现拍照的代理方法
extension ViewController: UIImagePickerControllerDelegate {
    // pickImageButton Action
    @objc func startPickImage(sender: Any) {
        takePicture()
    }
    // 拍照
    func takePicture() {
        guard UIImagePickerController.isSourceTypeAvailable(.camera) else {
            resultLabel.text = "camera not available"
            return
        }

        let cameraPicker = UIImagePickerController()
        cameraPicker.delegate = self
        cameraPicker.sourceType = .camera
        cameraPicker.allowsEditing = false
        present(cameraPicker, animated: true, completion: nil)
    }
    // 拍照取消代理方法
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }
    // 拍照完成代理方法
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        dismiss(animated: true, completion: nil)

        guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else {
            resultLabel.text = "no image"
            return
        }

        // 将图片缩小为8*8
        UIGraphicsBeginImageContext(CGSize(width: 8, height: 8))
        image.draw(in: CGRect(x: 0, y: 0, width: 8, height: 8))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        imageView.image = newImage

        guard let targetImage = newImage else {
            resultLabel.text = "new image is nil"
            return
        }

        let digitsModel = digits()
        guard let result = digitsModel.prediction(image: targetImage) else {
            resultLabel.text = "predict failed"
            return
        }
        resultLabel.text = "\(result)"

		// 将图像装换为预测数据后显示出来
        for y in 0..<Int(targetImage.size.height) {
            for x in 0..<Int(targetImage.size.width) {
                guard let gray = targetImage.getPixelColor(pos: CGPoint(x: x, y: y))?.getGray() else {
                    break
                }
                let color = UIColor(
                    red: 255 - (gray * 255).int,
                    green: 255 - (gray * 255).int,
                    blue: 255 - (gray * 255).int
                )
                images[y * 8 + x].backgroundColor = color
            }
        }
    }
}

результат операции

Мы можем написать от руки несколько чисел и сделать снимок, чтобы сделать прогноз. Но это может быть связано с тем, что обработка изображений недостаточно хороша, а фактические результаты тестов не идеальны. Поэтому напрямую отображайте тестовые данные на экране в Jupyter, а затем используйте мобильный телефон, чтобы делать снимки для тестирования.

show_image(digits.images[1501], digits.target[1501])
show_image(digits.images[1502], digits.target[1502])
show_image(digits.images[1503], digits.target[1503])

Используя приложение для фотосъемки для прогнозирования, вы можете видеть, что хотя восстановленное изображение имеет некоторые отклонения, результат все равно очень точен:





Суммировать


Я считаю, что благодаря описанному выше обучению и практике у вас появилось желание попробовать использовать машинное обучение, чтобы что-то сделать. Я надеюсь, что все смогут сохранить интерес и любопытство к машинному обучению и продолжать уверенно изучать и учиться в будущем.

резюмировать

  • В настоящее время мы знаем о двух категориях машинного обучения:предсказыватьиКлассификация, а классификацию иногда называют предсказанием. Например, в приведенном выше приложении так называемое «предсказание чисел на картинке» фактически классифицирует числа на картинке от 0 до 9. Умение точно определить категорию проблемы очень важно для последующих шагов.
  • Конструкция среды Python и разница между Python2 и Python3.
  • мы использовалиsklearn(scikit-learn)Это библиотека машинного обучения, представляющая собой упакованную библиотеку для обучения моделей с небольшим кодом.
  • Алгоритм, используемый для обучения,SVC (классификация опорных векторов) машинный классификатор опорных векторов, мы используем первые 2/3 данных для обучения, последнюю 1/3 данных для тестирования и выводим точность теста для оценки модели.
  • Обучение модели требует времени, а некоторые массивные данные или интенсивное вычислительное обучение могут занять много времени. Обученную модель можно сохранить для следующего использования.
  • Обученную модель можно использовать на нескольких платформах, но в зависимости от формата, поддерживаемого платформой, может потребоваться преобразование модели.

что ты пропустил

Как старая птица машинного обучения, вы можете сказать: «Эта статья — заголовок, машинное обучение широкое и глубокое, и это считается записью?!» Старая птица права, этой статье действительно не хватает вступления, я не только пропустил объяснение многих принципиальных знаний, но и скрыл многие детали:

  • В дополнение к sklearn существуют некоторые другие широко используемые библиотеки машинного обучения, например те, которые относительно просты в использовании.Keras, от GoogleTensorFlow,а такжеTheano,PyTorchЖдать.
  • Данные, которые мы используем для обучения модели, легко доступны, но в практических приложениях нам также необходимоСбор данных,Очистка данных (дедупликация, удаление ошибок),Нормализация данныхПосле этапа обработки данных может быть проведено следующее обучение.
  • КромеSVC, в машинном обучении существует множество других алгоритмов, и у каждого алгоритма есть свои преимущества и недостатки, а также область применения.
  • настройка параметровЭто незаменимый шаг в обучении модели для практических приложений.Путем настройки входных параметров и наблюдения за точностью выходных данных модели можно обучить относительно более точную модель.

Что насчет следующего

  • Есть также два набора данных с высоким вводным использованием в sklearn:Прогноз цен на жилье в БостонеиКлассификация ирисов, просматривая данные, завершая разработку приложения, прогнозируя цену дома, вводя информацию о доме, и классифицируя цветы, вводя информацию об радужной оболочке.
  • Попробуйте использовать то, что вы узнали выше о машинном обучении, для решения простой задачи в рабочем или личном проекте.
  • Самостоятельно проверьте информацию, чтобы понять более распространенные концепции машинного обучения:переоснащение,недооснащение,контролируемое обучение,неконтролируемое обучение,функция потерь,функция оптимизациии Т. Д.
  • Изучите некоторые часто используемые алгоритмы машинного обучения. Использованная литература:Знакомство с основными алгоритмами машинного обучения и анализ их преимуществ и недостатков
  • Узнайте о глубоком обучении и о том, как оно связано с машинным обучением.
  • В будущем могут быть новые статьи по применению машинного обучения в практических проектах и ​​вводные статьи по глубокому обучению, можете подписатьсяantscript.comRSS или черезэта ссылкаИспользуйте электронную почту, чтобы подписаться на обновления.
  • Поделитесь или сделайте ретвит этой статьи.
  • Если вы обнаружите какие-либо ошибки, пожалуйста, не стесняйтесь их исправлять, пишите на antscript@gmail.com.