OCaml вводит с разными уровнями специфики

1110 Действительно, это не так; и это не датафрейм - см. документы . Некоторая дополнительная информация включена в атрибут DESCR:

from sklearn.datasets import fetch_rcv1
rcv1 = fetch_rcv1()

print(rcv1.DESCR)

Результат:

.. _rcv1_dataset:

RCV1 dataset
------------

Reuters Corpus Volume I (RCV1) is an archive of over 800,000 manually 
categorized newswire stories made available by Reuters, Ltd. for research 
purposes. The dataset is extensively described in [1]_.

**Data Set Characteristics:**

    ==============     =====================
    Classes                              103
    Samples total                     804414
    Dimensionality                     47236
    Features           real, between 0 and 1
    ==============     =====================

:func:`sklearn.datasets.fetch_rcv1` will load the following 
version: RCV1-v2, vectors, full sets, topics multilabels::

    >>> from sklearn.datasets import fetch_rcv1
    >>> rcv1 = fetch_rcv1()

It returns a dictionary-like object, with the following attributes:

``data``:
The feature matrix is a scipy CSR sparse matrix, with 804414 samples and
47236 features. Non-zero values contains cosine-normalized, log TF-IDF vectors.
A nearly chronological split is proposed in [1]_: The first 23149 samples are
the training set. The last 781265 samples are the testing set. This follows 
the official LYRL2004 chronological split. The array has 0.16% of non zero 
values::

    >>> rcv1.data.shape
    (804414, 47236)

``target``:
The target values are stored in a scipy CSR sparse matrix, with 804414 samples 
and 103 categories. Each sample has a value of 1 in its categories, and 0 in 
others. The array has 3.15% of non zero values::

    >>> rcv1.target.shape
    (804414, 103)

``sample_id``:
Each sample can be identified by its ID, ranging (with gaps) from 2286 
to 810596::

    >>> rcv1.sample_id[:3]
    array([2286, 2287, 2288], dtype=uint32)

``target_names``:
The target values are the topics of each sample. Each sample belongs to at 
least one topic, and to up to 17 topics. There are 103 topics, each 
represented by a string. Their corpus frequencies span five orders of 
magnitude, from 5 occurrences for 'GMIL', to 381327 for 'CCAT'::

    >>> rcv1.target_names[:3].tolist()  # doctest: +SKIP
    ['E11', 'ECAT', 'M11']

The dataset will be downloaded from the `rcv1 homepage`_ if necessary.
The compressed size is about 656 MB.

.. _rcv1 homepage: http://jmlr.csail.mit.edu/papers/volume5/lewis04a/


.. topic:: References

    .. [1] Lewis, D. D., Yang, Y., Rose, T. G., & Li, F. (2004). 
           RCV1: A new benchmark collection for text categorization research. 
           The Journal of Machine Learning Research, 5, 361-397.

Итак, если вы хотите придерживаться оригинальной тренировки & amp; тестировать подмножества, как описано выше, вы должны просто:

X_train = rcv1.data[0:23149,]
X.train.shape
# (23149, 47236)

X_test = rcv1.data[23149:,]
X_test.shape
# (781265, 47236)

и аналогично для ваших y_train и y_test, используя rcv1.target.

Если вы хотите использовать другое обучение & amp; тестовый раздел, используйте:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
        rcv1.data, rcv1.target, test_size=0.33, random_state=42)

и соответственно настройте test_size.

9
задан Mat Kelly 21 March 2009 в 17:45
поделиться

3 ответа

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

Поскольку второе определение скрывает первое, когда компилятор будет видеть a и b поля, это ожидает, что они будут принадлежать fooConBar введите и так жалуется на недостающее поле панели.

При попытке моделировать интерфейс, корректный функциональный способ сделать это в Caml состоит в том, чтобы определить a module type.

module type FOO_CON_BAR = sig
  val a : string
  val b : int
  val bar : char
end

И экземпляр:

module Example = struct
  let a = "hello"
  let b = 99
  let c = '\n'
end

С модулями и модулем вводит Вас, также получают выделение подтипов; нет никакой потребности обратиться к объектам.

P.S. Мой Caml ржав; синтаксис может быть выключен.

9
ответ дан 4 December 2019 в 11:08
поделиться

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

Эти конструкции могут только использоваться, когда Вы не пытаетесь "произойти" из другого интерфейса, но просто реализовать его.

Если Вы хотите использовать эти объектно-ориентированные понятия в Ocaml, Вы могли бы посмотреть на объектную систему, или, в зависимости от Вашей проблемы, системы модуля. С другой стороны, Вы могли попытаться решить свою проблему функциональным способом. Какую проблему Вы пытаетесь решить?

3
ответ дан 4 December 2019 в 11:08
поделиться

В OCaml есть несколько возможных решений в зависимости от того, как вы используете предоставленный код. Самый простой - объединить два типа:

type fooBar = { a: string; b: int; bar: char option }

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

# let fsb = object
    method a = "a"
    method b = 3
  end;;
val fsb : < a : string; b : int > = <obj>

# fsb#a, fsb#b;;
- : string * int = ("a", 3)
4
ответ дан 4 December 2019 в 11:08
поделиться
Другие вопросы по тегам:

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