2010-01-14 4 views
8

전산 언어학을 전공하는 학생으로서 원시 또는 주석 텍스트 코서 나 구문 론적 나무 은행과 같은 다양한 리소스에서 교육 데이터를 준비해야하는 기계 학습 실험을 자주합니다. 모든 새로운 작업과 모든 새로운 실험을 위해 필요한 기능과 값을 추출하고 한 형식에서 다른 형식으로 데이터를 변환하는 프로그램 (일반적으로 Python 및 Java)을 작성합니다. 이것은 대개 대용량 파일의 수가 매우 많고 일부 시스템 학습 프레임 워크 (Weka의 arff 파일과 같은)에 대한 입력을 얻기 위해이를 처리하는 아주 많은 수의 작은 프로그램을 생성합니다.교육 자료를 준비하기위한 일반적인 프레임 워크는 무엇입니까?

많은 데이터에서 중요한 특성, 예외 또는 오류를 놓치지 않도록주의 깊게 처리해야합니다. 디자인 패턴이나 리팩토링 패러다임과 같은 우수한 소프트웨어 설계의 많은 원칙은 보안, 유지 관리 또는 지속 가능성과 같은 것이 중요하지 않기 때문에 이러한 작업에 큰 도움이되지 않습니다. 일단 프로그램이 더 이상 필요하지 않은 데이터를 성공적으로 처리하면 말입니다. 지금까지 필자는 파이썬 코드와 프로그램에서 간단한 절차 방식으로 클래스 나 함수를 사용하는 것에 대해 신경 쓰지 않았다. 다음 실험에서는 독특한 특성을 지닌 서로 다른 데이터 세트가 필요하며 다른 포맷으로도 준비가 가능하므로 어쨌든 처음부터 프로그래밍해야합니다. 지금까지 경험 한 바에 따르면 훈련 데이터 준비 작업에 프로젝트 시간의 80-90 %를 사용하는 것이 일반적이지 않습니다. 시간과 날은 한 데이터 형식에서 다른 데이터 형식으로 전환하는 방법에 대해서만 생각합니다. 때때로 이것은 매우 실망스럽게 될 수 있습니다.

글쎄, 당신은 아마 내가 의도적으로 조금 과장하고 있다고 생각 했겠지만, 나는 당신이 내가 말하려고하는 것을 이해하는 것이 긍정적이라는 것을 알고 있습니다. 내 질문은 실제로는 다음과 같습니다.

이러한 작업에 접근하기위한 일반적인 프레임 워크, 아키텍처, 모범 사례가 있습니까? 내가 작성한 코드 중 최적의 설계로 재사용이 가능할 것으로 기대합니까?

+0

내 대학원생의 경험에 비추어 볼 때, 나는 그것이 과장이라고 생각하지 않습니다. :피 – ealdent

답변

2

는 나 자신이 주로 적어도 내가 내리는 데 필요한 준비 등 정규 표현식과 사소한 필터링

충분히 간단 때, 간단한 스크립트에서 함께 일을 체인, GNU의로 coreutils 및 코퍼스 준비를위한 플렉스에서 textutils를 사용하여 찾을 수

일을 재사용 할 수는 있지만, 일반적인 규칙도 여기에 적용됩니다. 모범 사례 등을 고려하지 않고 프로그래밍하고 절차 적으로 프로그램하는 경우 IMHO는 새로운 프로젝트를 시작할 때 처음부터 모든 것을해야한다는 사실이 당연합니다.

형식 요구 사항이 많이 달라 지긴하지만 여전히 많은 일반적인 작업이 있습니다. 태그 - 스트리핑, 태그 - 번역, 선택, 도표화, 토큰 수, 문장 수 등과 같은 사소한 데이터 수확. 높은 재사용 성을 위해 이러한 작업을 프로그래밍하는 것은 처음에는 시간이 오래 걸리더라도 효과가 있습니다.

1

저는 이러한 프레임 워크에 대해 잘 모릅니다. 외부에 있지 않다는 것을 의미하지는 않습니다. 나는 내 자신을 사용하는 것을 선호합니다. 나는 코드 스 니펫의 모음입니다. 시간이 지남에 따라 수정/조정/차용되었으며 문제에 따라 다양한 구성으로 함께 연결할 수 있습니다. 이미 파이썬을 알고 있다면 NumPy에서 모든 데이터 준비를 처리하는 것이 좋습니다. ML 데이터 세트는 수천 개의 행 벡터가 수레로 가득 찬 경향이 있습니다. NumPy는 그런 종류의 일에 훌륭합니다. 또한, ML에 대한 교육 자료를 준비 할 때 거의 모든 노력에서 발생하는 두 가지 작업이 있으며 한 가지 문제에서 다른 문제로 완전히 바뀌지는 않을 것이라고 제안 할 수 있습니다. 나는 당신에게 이것들에 대한 발췌 문장을 아래에 주었다.

정상화 (확장 & 평균을 중심으로 난 당신이 알고 확신합니다, 당신은 확장 할 수 -1 1 또는 1 대 0으로. 비중 확대를 방지하기 위해 데이터를.나는 일반적으로 후자를 선택하여 희소성 패턴을 활용할 수 있습니다. 파이썬에서 NumPy와 라이브러리를 사용하여 :

import numpy as NP 
data = NP.linspace(1, 12, 12).reshape(4, 3) 
data_norm = NP.apply_along_axis(lambda x : (x - float(x.min()))/x.max(), 
              0, data) 

테스트 세트는 5 %, 트레이닝 세트, 95 %, 그래서 내가, '5'에서 기본 인수를 설정 한 여기 교차 검증 (- 이러는 함수에서 (

def divide_data(data, testset_size=5) : 
    max_ndx_val = data.shape[0] -1 
    ndx2 = NP.random.random_integers(0, max_ndx_val, testset_size) 
    TE = data_rows[ndx2] 
    TR = NP.delete(data, ndx2, axis=0) 
    return TR, TE 

마지막으로, 여기서 ML 알고리즘에 입력을 통해 그대로 원시 데이터의 컬렉션에서 전체 처리를 나타내는,) 투명하고 완전한 모두 우수한 case study (IMHO이다) 더 간단 K 배 만든다 이 경우 MLP). 그들은 또한 그들의 코드를 제공한다.

관련 문제