0

나는 이진 분류 문제라고 생각하고있다.이진 분류 그룹으로

예문 3 개가 있다고 가정 해 보겠습니다. 각 문장마다, 나는 그것을 임의의 덩어리로 나눈다. 이제 문장 S는 n = 1 ... 4에 대해 X (n) 청크를 가질 수 있습니다. 내 문제에 대해 감독 학습을 사용하기 위해 나머지 청크가 0, X (1,3,4) = 0으로 표시되는 동안 X (2) = 1이라고 말하면 이러한 청크 중 하나를 올바른 청크로 표시합니다.

이제이 속성에 대해 문장 S에서 한 청크에 양수로 레이블을 지정하는 경우에 문장 S에서 다른 청크에 긍정적으로 레이블을 지정할 수없는 분류자를 교육하고 싶습니다. S에서 모든 남은 청크가 자동으로 0이됩니다.

필자는 이것이 어떻게 든 내 데이터의 종속성을 구성하는 것으로 알고 있지만 올바르게 모델링하는 방법/사용할 모델링 유형을 잘 모릅니다.

미리 감사드립니다.

+0

나는이에 돌아 오는 유지 :

다음과 같이 그래서, 나는 다음 sklearn 라이브러리에서 OvR classier를 실행 할 데. 정확히이 모델의 결과는 무엇입니까? 전체 문장과 청크 색인입니까? 청크 배열과 색인? "승리 한"덩어리 만? 지금까지 표준 NN 득점에 추가 입력 1 개와 추가 출력 1 개로 보입니다. – Prune

+0

최적화가 끝나면 모델의 출력은 모든 학습 데이터에서 올바른 문장의 가장 높은 분류를 산출하는 계수가 바람직하며 이는 테스트 데이터로 이어질 수 있습니다. 즉, chunk (n), n이 1 ... 6 인 테스트 예제를 입력하면 모델은 "올바른"청크를 선택할 가능성이 가장 높습니다. –

+0

알았습니다. 나는 lejiot의 토론 주제를 밀어 넣는 것이 좋습니다. – Prune

답변

0

사실은 단순히 입력 양식

chunk 1, chunk 2, chunk 3, chunk 4 

이며 출력은 청크 그게 다야, 긍정적 라벨 말의 핫 인코딩이며, 간단한 분류 것 같습니다. 그래서 당신은 정상적인 "멀티 클래스"분류를 가지고 있습니다.

복잡한 구조화 된 예측기로 이동할 필요가 없습니다.

+0

내가보기에 문제는 동일한 문장 덩어리가 코퍼스의 다른 색인에 나타날 수 있다는 것입니다. 내용은 색인보다는 중요하다 ... 나는 생각한다 ... – Prune

+0

그것은 어떻게 중요합니까?모든 덩어리를 모아서 구별 할 수 있다고 가정하면, 그것은 여전히 ​​분류 일뿐입니다. 추가 입력으로 전체 컨텍스트를 제공 할 수도 있습니다. 복잡한 시퀀스 분석이 필요한 경우에도 멀티 클래스 분류 만 변경하지 않습니다. – lejlot

+0

가능한 경우 사후 처리를 간단하게하려고합니다. – Prune

0

@ lejlot의 답변에 약간의 세부 사항을 추가 할 것이라고 생각했습니다.

필자의 경우 각 청크는 4 개의 피쳐 (f_num)로 구성됩니다. n이 트레이닝 예제의 수이면 각 트레이닝 예제 X (n)은 임의의 개수의 청크 X (c_num)를가집니다. 이들에 대해 적절한 멀티 클래스 분류를 수행하기 위해 각 트레이닝 예제가 모든 트레이닝 예제에서 k = c_num * f_num (c_num = max (X (c_num)) 인 k 개의 항목 목록이되도록 데이터를 조작합니다. 필요한 경우 각 예제는 제로 패딩됩니다.

따라서 내 트레이닝 데이터의 두 가지 예는 다음과 같다 :

dataX = [[0.281716105245517, 0.10665638086841528, 0.040441347270615546, 0.28939545406713674, 0.10708721346704864, 0.03575772540627547, 0.2919388156600431, 0.10567033629920064, 0.03548559505822619, 0.30111236802413277, 0.10374468925995455, 0.03198108511697361, 0.2712227031280739, 0.07861422245376401, 0.024556163928986227, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.29104112097787405, 0.10762980405837547, 0.03363727715955192, 0.31072658779074447, 0.11590693257359923, 0.03705562014318057, 0.3337477701497378, 0.14185185185185187, 0.05529482551143203, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]] 
dataY = [2, 1] 
dataY 대상 lables는, 제 1 예에 대한 응답으로서 제 2 청크를 나타내고

; 두 번째 예제의 경우 첫 번째 청크. - 그것은 기존 환경의 흥미로운 확장입니다

# import libraries 
from sklearn.multiclass import OneVsRestClassifier 
from sklearn.svm import LinearSVC 

# get data and train 
dataX, dataY = getYour(awesome, training, data) 
fit = OneVsRestClassifier(LinearSVC(random_state=0)).fit(dataX, dataY) 

# fit data and count number of correct 
# classifications 
correct = 0 
prediction = fit.predict(yourNeatTestDataX) 
for i in range(len(yourNeatTestDataY)): 
    if dataY[i] == prediction[i]: 
     correct += 1 

print "Matches:", correct, "of", len(dataY),"=",float(correct)/len(dataY)