То, как действительно кодирует записанный на одном языке, называют с другого языка

  1. Разделите ваши данные на обучающие и тестируйте:

    var_train, var_test, res_train, res_test = train_test_split(variable_list, result_list, test_size = 0.3)
    
  2. Обучите ваше дерево решений на наборе поездов:

    decision_tree = tree.DecisionTreeClassifier()
    decision_tree = decision_tree.fit(var_train, res_train)
    
  3. [ 119]

    Тестирование производительности модели путем расчета точности на тестовом наборе:

    res_pred = decision_tree.predict(var_test)
    score = accuracy_score(res_test, res_pred)
    

    Или вы можете напрямую использовать decision_tree.score:

    score = decision_tree.score(var_test, res_test)
    

Ошибка вы получаете, потому что вы пытаетесь передать variable_list (это ваш список входных функций) в качестве параметра в accuracy_score. Предполагается, что вы передадите свой список истинных меток и предсказанных меток.

7
задан Community 23 May 2017 в 12:31
поделиться

7 ответов

Нет единого ответа на вопрос, который работает везде. В общем, ответ заключается в том, что два языка должны согласовать «что-то» - набор или правила или «протокол вызова».

На высоком уровне любой протокол должен определять три вещи:

  • «обнаружение» ": как узнать друг о друге.
  • " linking ": Как установить соединение (после того, как они узнают друг о друге).
  • " Invocation ": Как на самом деле делать запросы друг к другу.

The детали сильно зависят от самого протокола.

Иногда два языка вступают в сговор для совместной работы. Иногда два языка соглашаются поддерживать какой-то протокол, определенный извне. В наши дни также часто используется ОС или «среда выполнения» (.NET и Java). Иногда способность действует только в одну сторону («A» может вызывать «B», но «B» не может вызывать «A»).

Обратите внимание, что это та же проблема, с которой сталкивается любой язык при взаимодействии с ОС. Вы знаете, что ядро ​​Linux не написано на схеме!

Давайте посмотрим на некоторые типичные ответы из мира Windows:

  • C с C ++ : C ++ использует искаженный ("искаженный") вариант "C" протокол». C ++ может вызывать C, а C может вызывать C ++ (хотя имена иногда могут быть довольно запутанными, и может потребоваться внешняя помощь для перевода имен). Это не только Windows; это обычно верно для всех платформ, поддерживающих оба. Наиболее популярные ОС также используют "протокол C."

  • VB6 по сравнению с большинством языков : предпочтительный метод VB6 - "протокол COM". Другие языки должны иметь возможность писать COM-объекты, чтобы их можно было использовать из VB6. VB6 также может создавать COM-объекты (хотя и не все возможные варианты COM-объектов).

    VB6 может также говорить об очень ограниченном варианте «протокола C», а затем только для выполнения внешних вызовов: он не может создавать объекты, которые могут быть общались напрямую через "протокол C."

  • Языки .NET : Все языки .NET передают компиляцию на один и тот же язык низкого уровня (IL). Среда выполнения управляет коммуникацией, и с этой точки зрения все они выглядят как один и тот же язык.

  • VBScript по сравнению с другими языками : VBScript может использовать только часть протокола COM.

Еще одно примечание: «Веб-службы» SOAP также являются «протоколом вызова», как и многие другие сетевые протоколы, которые становятся популярными. В конце концов, это

13
ответ дан 6 December 2019 в 06:51
поделиться

Обычно код C ++ вызывает интерпретатор для языка сценариев. Степень взаимодействия между скомпилированным кодом и кодом сценария зависит от интерпретатора, но всегда есть способ передать данные между ними. В зависимости от интерпретатора может быть возможно манипулировать объектами на одной стороне с другой стороны, например, функция C ++, вызывающая метод объекта Ruby. Может быть даже способ контролировать выполнение одного из другого.

4
ответ дан 6 December 2019 в 06:51
поделиться

Существует протокол, по которому модули взаимодействуют. Вот общий обзор того, как это работает:

  1. Библиотека создается для кода, которым вы хотите «поделиться». Их обычно называют DLL или SO, в зависимости от вашей платформы.
  2. Каждая функция, которую вы хотите предоставить (точка входа), будет доступна для привязки к внешнему миру. Существуют протоколы привязки, такие как соглашение о вызовах, в котором указывается порядок передачи параметров, кто очищает стек, сколько параметров сохраняется в регистрах и какие и т. Д. См. Cdecl, stdcall и т. Д. Для примеров вызова. соглашения здесь .
  3. Вызывающий модуль будет статически или динамически связываться с разделяемой библиотекой.
  4. После того, как ваша вызывающая библиотека привязана к общей библиотеке, она может указать, что она хочет привязаться к определенной точке входа. Обычно это делается по имени, однако большинство платформ также предлагают возможность привязки по индексу (быстрее, но более хрупко, если ваш модуль изменяется и точки входа переупорядочиваются).
  5. Вы также обычно объявляете функцию, которую хотите вызвать, в где-то в вашем модуле, чтобы ваш язык мог выполнять статическую проверку типов, знал, что такое соглашение о вызовах и т. д.

Для вашего сценария вызова Scheme из C ++ интерпретатор Scheme, скорее всего, экспортирует функцию, которая динамически связывается с функцией / объектом Scheme и называет это. Если модуль Scheme скомпилирован, он, вероятно, имеет возможность экспортировать точку входа, чтобы ваш модуль C ++ мог привязаться к ней.

4
ответ дан 6 December 2019 в 06:51
поделиться

Вы также можете интегрировать две среды без необходимости компилировать библиотеку интерпретатора внутри исполняемого файла. Вы храните exe и Scheme exe как отдельные программы в вашей системе. Из основного исполняемого файла вы можете записать код схемы в файл, а затем использовать system () или exec () для запуска интерпретатора схемы. Затем вы анализируете вывод интерпретатора схемы.

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

Если запуск отдельного exe не удовлетворяет ваши требования к производительности, вы можете разработать протокол, в котором интерпретатор схемы становится сервером. Вам нужно написать некоторые функции схемы, которые ждут ввода в сокет или файл, eval этот ввод затем выводит результат в тот же сокет или другой файл. Другая итерация этого - рассмотрение существующих серверов, на которых может уже быть запущен ваш интерпретатор, например, в apache есть модули, позволяющие писать код на многих языках.

2
ответ дан 6 December 2019 в 06:51
поделиться

Если вы действительно ищете инструменты для этого, а-ля Адам, см. swig .

1
ответ дан 6 December 2019 в 06:51
поделиться

Прошло около десяти лет, но я сделал именно это для своего старшего замкового камня (ну, я построил нейронную сеть с обратным распространением на C и использовал программу-схему для обучения этому). Версия Scheme, которую я использовал, имела компилятор, а также интерпретатор, и я смог создать ее как файл .o. Я не знаю, какую версию схемы я использовал, но похоже, что RScheme превратит код вашей схемы в C.

1
ответ дан 6 December 2019 в 06:51
поделиться

С теоретической точки зрения, когда программе A нужно использовать ресурсы (класс / функции / и т. Д.) Из программы B, речь идет о передаче некоторой информации от A к B и получении некоторой информации назад или какие-то действия выполнены. Таким образом, B должен быть способ, позволяющий A передавать информацию и получать результат.

На практике управление этим процессом обычно лежит на плечах языков: язык B (на котором написана программа B) сгенерирует протокол и сделает ресурсы в B доступными предопределенным способом, затем язык A (программа A написано в) предоставит некоторую утилиту / структуру, чтобы помочь вызвать открытые ресурсы и получить результаты в соответствии с протоколом B.

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

Такие вещи, как SOAP и т. Д., Являются всего лишь способом регулирования программ для ввода ввода в соответствии с общепринятым стандартом.

1
ответ дан 6 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: