C (또는 C ++)의 데이터 과학


40

저는 R언어 프로그래머입니다. 나는 또한 데이터 과학자로 간주되지만 CS 이외의 학문 분야에서 온 사람들의 그룹에 있습니다.

이것은 데이터 과학자로서의 역할에서 잘 작동하지만 R다른 스크립팅 / 웹 언어에 대한 기본 지식 만 가지고 경력을 시작함으로써 두 가지 주요 영역에서 다소 부적절하다고 느꼈습니다.

  1. 프로그래밍 이론에 대한 확실한 지식이 부족합니다.
  2. 경쟁과 같은보다 빠르고 널리 사용되는 언어의 기술 수준 부족 C, C++그리고 Java파이프 라인과 빅 데이터 계산의 속도를 증가시킬뿐만 아니라 더 쉽게 빠르게로 개발 될 수 DS / 데이터 제품을 만드는 데 활용 될 수있다, 백엔드 스크립트 또는 독립형 애플리케이션.

해결책은 간단합니다. 프로그래밍에 대해 배우십시오. 프로그래밍에 대해 배우십시오. 이것은 일부 클래스 (현재 C 프로그래밍)에 등록하여 수행 한 것입니다.

그러나, 나는 주소 문제 # 1 위 # 2로 시작 해요 지금, 나는 "자신을 물어 왼쪽있어 같은 언어입니다 얼마나 생존 CC++데이터 과학이? ".

예를 들어, 데이터를 매우 빠르게 이동하고 사용자와 잘 상호 작용할 수 있지만 고급 회귀, 기계 학습, 텍스트 마이닝 및 기타 고급 통계 작업은 어떻습니까?

그래서. 수있는 C일을 할 - 고급 통계, ML, AI 및 데이터 과학의 다른 영역에 사용할 도구는 어떤 것이 있습니까? 아니면 스크립트 나 다른 언어를 C호출 하여 프로그래밍 함으로써 얻을 수있는 대부분의 효율성을 느슨하게해야 R합니까?

내가 지금까지 C에서 발견 한 가장 좋은 자원이라는 라이브러리 상어 제공, C/ C++서포트 벡터 머신, 선형 회귀 (안 비선형 및 다항 프로 빗과 같은 다른 고급 회귀 등) 및 기타의 명단을 사용할 수있는 기능을 통계 기능.


5
이 질문은 주로 의견에 근거한 것으로 보입니다. 표현을 고려하십시오. C / C ++에 어떤 종류의 데이터 과학 도구를 사용할 수 있는지 또는 이러한 언어를 사용하는 응용 프로그램 종류를 물어보십시오.
sheldonkreger

1
@sheldonkreger 이것이 내가 묻는 것입니다. 감사합니다
Hack-R

1
와플 (C ++)을 사용하여 기계 학습을 기존 C ++ 엔진에 통합했습니다.
Pete

@Pete 답변에 포함시킬 수 있다면 해결책으로 표시 할 것입니다.
Hack-R

1
메타 툴킷은 C ++에서 사용할 수 있습니다 : meta-toolkit.github.io/meta . Coursera에는이 코스를 사용하는 코스가 있습니다. 1 주일이 지났으므로 살펴볼 수 있습니다. 이 과정을 "텍스트 검색 및 검색 엔진"이라고합니다.
LauriK

답변:


35

아니면 R 스크립트 나 다른 언어를 호출하여 C로 프로그래밍하면 얻을 수있는 대부분의 효율성을 잃어야합니까?

R 확장을 작성하기 위해 C / C ++를 배우십시오. 새 알고리즘의 성능 결정 섹션에만 C / C ++를 사용하고 R을 사용하여 분석을 빌드하고 데이터를 가져오고 플롯을 작성하십시오.

R을 넘어서고 싶다면 파이썬을 배우는 것이 좋습니다. 등 가능한 많은 도서관이있다 scikit 배울 기계 학습 알고리즘 또는 대한 PyBrain (사용 pylab / 신경망 등을 구축 하기 matplotlib을 플로팅 및 대한 iPython 노트북 사용자 분석을 개발하기 위해). 다시 C / C ++는 시간 확장 알고리즘을 파이썬 확장으로 구현하는 데 유용합니다.


1
고마워, 안드레 Pybrain을 많이 사용합니다. 나를 위해 파이썬은 R과 C 사이의 중간이지만, 속도와 코드의 넓은 적용을 위해 C를 배우고 싶었습니다. R 확장을 작성하기 위해 C / C ++를 사용하는 것을 생각하지 않았기 때문에 이것을 솔루션으로 선택했습니다. 이것은 절대적으로 할 것입니다. 감사!!
Hack-R

1
나는 파이썬을 배우는 개념을 두 번째로 생각합니다. R을 활용하여 이러한 데이터 세트를 분석하는 대규모 데이터 세트 및 데이터 과학자와 협력합니다. 비록 어린 나이에 C를 배웠지 만, 파이썬은 프로그래머로서 가치를 제공하고 이러한 데이터 과학자를 돕는 언어 중 하나입니다. 그러므로 자신이 아닌 팀을 칭찬 해보십시오.
글렌 스완

1
마찬가지로 파이썬은 cython (기본적으로 C)으로 작성하여 가속화됩니다. 아직 사용하지 않았다고 말해야합니다. 기존 라이브러리를 사용하여 수행 할 수없는 것은 거의 없습니다 (예 : scikit-learn, python의 팬더 [cython으로 작성되었으므로 반드시 작성하지 않아도됩니다!]).
seanv507

다른 유용한 파이썬 라이브러리는 다음과 같습니다 : 팬더, numpy, scipy 등. 파이썬 학습을 지원하기 위해 이것을 추가 :)
Shagun Sodhani

이 자리에 있습니다. CS 배경이 없다면 파이썬의 기본 함수 또는 R의 패키지보다 코드를 더 효율적으로 작성할 가능성은 매우 먼 것입니다. 13 년 동안 C ++로 프로그래밍했지만 여전히 메모리 관리 및 성능 최적화 측면이 좋지 않다고 생각합니다. 또한 python & R은 배포 문제를 최적화하는 매우 똑똑한 컴퓨터 과학자를 보유하고 있으므로 C 언어는 실제로 매우 낮은 대기 시간 시스템으로 강등됩니다.
jagartner

10

Andre Holzner가 말했듯이 R을 C / C ++ 확장으로 확장하는 것은 양쪽의 장점을 최대한 활용할 수있는 아주 좋은 방법입니다. 또한 C ++로 작업하고 RInside 패키지 o R을 사용하여 R의 함수를 호출하는 inverse를 시도 할 수 있습니다. 여기에서 방법을 찾을 수 있습니다.

http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html

C ++로 작업하면 많은 라이브러리가 있으며 많은 라이브러리는 특정 문제, 더 일반적인 다른 문제를 위해 구축됩니다.

http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html

http://mlpack.org/


9

현재 추세는 Python / R을 사용하고 계산 비용이 많이 드는 작업을 위해 C / C ++ 확장에 바인딩하는 것입니다.

그러나 C / C ++에 머 무르려면 Dlib을 살펴 보십시오 .

Dlib는 계약 프로그래밍 및 최신 C ++ 기술을 사용하여 설계된 범용 크로스 플랫폼 C ++ 라이브러리입니다. 오픈 소스 소프트웨어이며 Boost Software License에 따라 라이센스가 부여됩니다.

여기에 이미지 설명을 입력하십시오


또 다른 유용한 답변. 이미지를 프리젠 테이션이나 블로그 등에 넣고 싶은 경우 자유롭게 이미지를 재생할 수 있는지 알고 있습니까? 또한 "> 20k 샘플"과 같은 것이 실제로 "샘플"또는 "샘플의 관찰"을 의미하는지 궁금하십니까?
Hack-R

2
나는 dlib 저자입니다. 원하는 위치에 이미지를 게시하십시오 :). 또한> 20k 샘플은 20k 벡터 이상을 의미합니다. 각 샘플에 몇 개의 변수가 있는지는 별개의 문제입니다.
Davis King

@ Hack-R "샘플"은 통계 / 머신 러닝에서 오버로드 된 용어 중 하나입니다 (때때로 "샘플 크기", "샘플 평균"등). "10K 샘플에 대한 분류 된 학습자"와 같이 개별 인스턴스를 의미합니다.
Tim Goodman

6

내 의견으로는, 이상적으로, 더 할 수 균형 잡힌 전문, 알고 좋을 것이다 적어도 가장 인기에 대해 하나 개의 프로그래밍 언어를 프로그래밍 패러다임 ( 절차 적 , 객체 지향 , 기능 ). 물론, 나는 생각 R파이썬 에 대한 두 개의 가장 인기있는 프로그래밍 언어와 환경으로 데이터 과학 그러므로하고, 주요 데이터 과학 도구.

Julia 는 특정 측면에서 인상적이지만 두 가지를 따라 잡아 주요 데이터 과학 도구로 자리 매김하려고합니다. 그러나 R / Python인기 , 매우 큰 커뮤니티 뿐만 아니라 기존 및 새로 개발 된 패키지 / 라이브러리 의 거대한 생태계 , 매우 광범위한 도메인 / 필드를 포함하여 곧 이런 일이 일어나지 않을 것 입니다. 연구.

그 많은 패키지와 라이브러리를 미루어 보아, 데이터 과학에 초점을 맞추고, ML 및 AI 지역이되어 구현 및 / 또는 제공하는 API를 R 또는 파이썬 이외의 언어를 (증거를 들어 볼 이 큐 레이트 목록이 큐 레이트 목록을 , 모두의 우수하고 해당 분야의 다양성에 대한 견고한 관점을 제공합니다. 성능 지향 또는 특수 소프트웨어의 경우 특히 그렇습니다 . 해당 소프트웨어의 경우 대부분 Java, C 및 C ++에서 구현 및 / 또는 API가 포함 된 프로젝트를 보았습니다 (Java는 특히 Hadoop 및 생태계와의 근접성 및 NLP 에서 데이터 과학 의 큰 데이터 세그먼트 에서 널리 사용됩니다)세그먼트 기반)이지만 도메인 기반 범위는 훨씬 제한적이지만 다른 옵션도 사용할 수 있습니다. 이러한 언어 중 어느 것도 시간 낭비가 아니지만 현재 작업 상황, 프로젝트 및 관심사 로 언어의 일부 또는 전부를 마스터하는 우선 순위지정 해야합니다 . 따라서 C / C ++ (및 Java)의 생존 가능성에 대한 귀하의 질문에 대답하기 위해 주요 데이터 과학 도구가 아니라 보조 도구 로 모두 실행 가능 하다고 말하고 싶습니다 .

1) 귀하의 질문에 대답 C A와 잠재적 인 데이터 과학 도구 및 2)의 효율을 하면서 사용하는 것이 가능 1) : 내가 말할 것 C를 내가, 데이터 과학 에 대한 추천 은 매우이 것 때문에, 그 일을 해당 라이브러리를 찾는 데 어려움을 겪거나 훨씬 더 직접적으로 해당 알고리즘을 구현하려고 시도합니다. 2) 성능이 중요한 코드 세그먼트가 C와 같은 저수준 언어로 구현되므로 효율성에 대해 걱정할 필요가 없으며, 인기있는 데이터 과학 언어를 C (예 : Rcpp패키지) 와 인터페이스 할 수있는 옵션이 있습니다. C / C ++과의 통합 R : http://dirk.eddelbuettel.com/code/rcpp.html). 이는 다양한 병렬 프로그래밍 프레임 워크, 패키지 및 라이브러리를 사용하는 것뿐만 아니라 R에서 벡터화를 일관되게 사용하는 것과 같이 성능에 대한 더 단순하지만 종종 효과적인 접근 방식에 추가됩니다. R 생태계 예제는 CRAN 태스크보기 "R을 사용한 고성능 및 병렬 컴퓨팅"을 참조하십시오 .

데이터 과학 에 대해 말하면 , 나는 재현 가능한 연구 접근법 의 중요성 과 다양한 도구 의 가용성 을 언급 하고이 개념을 지원하는 것이 상당히 의미가 있다고 생각합니다 (자세한 내용은 관련 답변을 참조하십시오 ). 내 답변이 도움이 되길 바랍니다.


5

R은 데이터 과학자를위한 핵심 도구 중 하나입니다.

이제 C, C ++ 또는 심지어 Java에 대해서도 이야기합니다. 그들은 좋은 인기있는 언어입니다. 필요한지 또는 필요한지는 직종 또는 프로젝트 유형에 따라 다릅니다. 개인적인 경험을 통해 데이터 과학자를위한 도구가 너무 많아 항상 배우는 것이 필요하다고 느끼게됩니다.

원하는 경우 학습 할 내용에 Python 또는 Matlab을 추가하고 계속 추가 할 수 있습니다. 배우는 가장 좋은 방법은 익숙하지 않은 다른 도구를 사용하여 작업 프로젝트를 수행하는 것입니다. 내가 당신이라면, C보다 먼저 파이썬을 배울 것입니다. 그것은 C보다 커뮤니티에서 더 많이 사용됩니다. 그러나 C를 배우는 것은 시간 낭비가 아닙니다.


압도적 인 도구 수에 대해 당신이 무엇을 의미하는지 알고 있습니다! 나는 인턴에게주의를 산만하게하지 말고 단지 1 ~ 2 가지에 집중하라고 말하지만 내 자신의 충고를 취하는 것은 어렵다.
Hack-R

5

데이터 과학자로서 다른 언어 (C ++ / Java)는 기계 학습을 기존 프로덕션 엔진에 통합해야 할 때 유용합니다.

와플 은 잘 관리 된 C ++ 클래스 라이브러리이자 명령 줄 분석 패키지입니다. 감독 및 비지도 학습, 수많은 데이터 조작 도구, 희소 데이터 도구 및 기타 오디오 처리와 같은 것들이 있습니다. 또한 클래스 라이브러리이기 때문에 필요에 따라 확장 할 수 있습니다. C ++ 엔진을 개발하는 사람이 아니더라도 (그렇지 않을 수도 있음),이를 통해 개발자에게 무언가를 프로토 타이핑, 테스트 및 전달할 수 있습니다.

가장 중요한 것은 C ++ 및 Java에 대한 내 지식이 실제로 Python 및 R의 작동 방식을 이해하는 데 도움이된다고 생각합니다. 모든 언어는 아래에서 일어나는 일에 대해 조금 이해했을 때만 올바르게 사용됩니다. 언어 간의 차이점을 배우면 주요 언어의 장점을 활용하는 방법을 배울 수 있습니다.

최신 정보

대용량 데이터 세트가있는 상용 응용 프로그램의 경우 Apache Spark-MLLib가 중요합니다. 여기서 Scala, Java 또는 Python을 사용할 수 있습니다.


2

목표가 "하지만 고급 회귀, 기계 학습, 텍스트 마이닝 및 기타 고급 통계 작업은 어떻습니까"인 경우 왜 다른 언어 (Python 형태)가 필요한지 이해하고 싶습니다.
그런 종류의 경우 C는 시간 낭비입니다. 그것은 좋은 도구이지만 Java가 나온 후 ~ 20 년 동안 C를 거의 코딩하지 않았습니다
.R의 기능 프로그래밍 측면을 선호하는 경우 C 로 너무 많은 절차 적 나쁜 습관을 코딩하기 전에 Scala를 배우십시오. .
마지막으로 해들리 위컴의 라이브러리를 사용하는 방법을 배우게 - 그들이 당신에게 데이터 조작을하고 많은 시간을 절약 할 수 있습니다.


R 및 Python과 같은 언어는 C와 같은 언어에 비해 매우 느리고 비효율적이므로 많은 데이터 및 계산을 처리 할 때 C에서 무언가를 할 수 있다면 R에서 할 수있는 것보다 빠릅니다. 나는 사랑하고 사용합니다. 해들리 패키지 tho!
Hack-R


1

그것이 언급되었는지 아직 확실하지 않지만 vowpal wabbit도 있지만 특정 종류의 문제에만 해당 될 수 있습니다.


1
재미있어 보인다. 링크 만 살펴 봤지만 언급 된 모델 유형은 매우 유용합니다. 그래도 프로그램에서 사용할 수있는 일반 C 라이브러리입니까? 더 조사해야 할 것입니다.
Hack-R

0

진행중인 Intel DAAL 을 살펴보십시오 . 인텔 CPU 아키텍처에 최적화되어 있으며 분산 계산을 지원합니다.


0

빅 데이터를위한 확장 가능한 머신 러닝 솔루션 :

빅 데이터에 대한 기계 학습 -이전의 모든 게시물에서 다루지 않은 핵심 영역이 있기 때문에 $ .02를 추가하겠습니다 !

빅 데이터의 경우 확장 성이 핵심이며 R은 충분하지 않습니다. 또한 Python 및 R과 같은 언어는 일반적으로 다른 언어로 작성된 확장 가능한 솔루션과의 인터페이스에만 유용합니다. 나는 이것을 사용하는 사람들을 비방하기를 원하기 때문에가 아니라 데이터 과학 커뮤니티의 구성원들이 진정으로 확장 가능한 기계 학습 솔루션이 무엇인지 이해하는 것이 중요하기 때문에이 구별을합니다.

분산 메모리 클러스터에 대한 빅 데이터를 사용 하여 대부분의 작업을 수행 합니다 . 즉, 하나의 16 코어 시스템 (단일 마더 보드의 메모리를 공유하는 단일 마더 보드의 4 쿼드 코어 프로세서) 하나만 사용하는 것이 아니라 64 16 코어 시스템의 작은 클러스터를 사용합니다. 이러한 분산 메모리 클러스터에 대한 요구 사항은 공유 메모리 환경과는 매우 다르며 빅 데이터 머신 학습에는 분산 메모리 환경 내에서 확장 가능한 솔루션이 필요한 경우가 많습니다.

또한 독점 데이터베이스 제품 내 어디에서나 C 및 C ++를 사용합니다. 우리의 모든 높은 수준의 내용은 C ++ 및 MPI로 처리되지만 데이터를 접하는 낮은 수준의 내용은 모두 길고 C 스타일의 문자 배열로 제품을 매우 빠르게 유지합니다. 표준 문자열의 편의성은 단순히 계산 비용이 들지 않습니다.

분산되고 확장 가능한 머신 러닝 기능인 MLPACK 을 제공하는 C ++ 라이브러리는 많지 않습니다 .

그러나 API를 사용하여 확장 가능한 다른 솔루션이 있습니다.

Apache Spark에는 인터페이스 할 수있는 MLib 라는 확장 가능한 머신 러닝 라이브러리 가 있습니다.

또한 Tensorflow 지금이 분산 tensorflow을 하고있다 C ++ API를 .

도움이 되었기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.