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
.
В 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 ржав; синтаксис может быть выключен.
Второй тип переопределяет a и b, эффективно скрывая первое, которое является, почему он не может больше создаваться. Вы могли определить эти типы в различных модулях, но это совпадет с использованием другого имени для a и b.
Эти конструкции могут только использоваться, когда Вы не пытаетесь "произойти" из другого интерфейса, но просто реализовать его.
Если Вы хотите использовать эти объектно-ориентированные понятия в Ocaml, Вы могли бы посмотреть на объектную систему, или, в зависимости от Вашей проблемы, системы модуля. С другой стороны, Вы могли попытаться решить свою проблему функциональным способом. Какую проблему Вы пытаетесь решить?
В 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)