나는 매우 간단한 기계 학습 문제라고 생각하는 것에 노력하고 있습니다.sklearn을 사용하는 다중 클래스 로지스틱 회귀 (다중 클래스로 y를 나타냄)
이 문제는 내가 분류하고자하는 y (레이블)은 다중 클래스 값입니다. 이 데이터 세트에는 6 가지 가능한 선택이 있습니다.
저는 preprocessing.LabelBinarizer() 함수를 사용하여 y가 1 또는 0의 배열로 충분하도록하기 위해 (예 : [0 0 0 0 0 1]) 피벗했습니다.
아래의 코드는 ValueError로 인해 model.fit()에서 실패합니다. 일치하지 않는 샘플 수의 배열을 찾았습니다 : [217 1302] || 1302 BTW
lb = preprocessing.LabelBinarizer()
api_y = lb.fit_transform(df['gear'])
y = pd.DataFrame(api_y)
y = np.ravel(y)
열 알고리즘을 대신 1~6 열 같이 표시 화기 반환 결과는 6 자리의 배열을 포함하는 것으로 보인다 217 * 6이다.
아래 코드를 사용하여 배열 모델에 강제로 넣으려고했으나 다른 이유로 fit 함수가 실패합니다. ValueError : 알 수없는 레이블 유형 배열 ([array [0,1,0,0,0]) 이도 6 개 고유 필드를 만든 대 (6)의 값의 배열로 표시 한 바와 같이, arrary ([0,1,0,0 ...])
lb = preprocessing.LabelBinarizer()
api_y = lb.fit_transform(df['gear'])
y_list = []
for x in api_y:
item = {'gear': np.array(x)}
y_list.append(item)
y = pd.DataFrame(y_list)
print("after changing to binary classes array y is "+repr(y.shape))
y = np.ravel(y)
I는 아무 소용 sklearn_pandas.DataFrameMapper 시도 들.
어떤 도움이나 제안을 주시면 감사하겠습니다 ... 내가 바로 명확성을 위해 여기에 게시 된 무슨 생각의 전체 버전 :
#!/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
import pandas as pd
import numpy as np
from patsy import dmatrices
from sklearn.linear_model import LogisticRegression
from sklearn import preprocessing
from sklearn.cross_validation import train_test_split, cross_val_score
from sklearn import metrics
import sklearn_pandas
#
# load traing data taken from 2 years of strava rides
df = pd.DataFrame.from_csv("gear_train.csv")
#
# Prepare data for logistic regression
#
y, X = dmatrices('gear ~ distance + moving_time + total_elevation_gain + average_speed + max_speed + average_cadence + has_heartrate + device_watts', df, return_type="dataframe")
#
# Fix up y to be a flattened array of 1 column (binary array?)
#
lb = preprocessing.LabelBinarizer()
api_y = lb.fit_transform(df['gear'])
y = pd.DataFrame(api_y)
y = np.ravel(y)
#
# run the logistic regression
#
model = LogisticRegression()
model = model.fit(X, y)
score = model.score(X, y)
#
# evaluate the model by splitting into training and testing data sets
#
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
model2 = LogisticRegression()
model2.fit(X_train, y_train)
predicted = model2.predict(X_test)
print("predicted="+repr(lb2.inverse_transform(predicted)))
print(metrics.classification_report(y_test, predicted))
#
# do a 10-fold CV test to see if this model holds up
#
scores = cross_val_score(LogisticRegression(), X, y, scoring='accuracy', cv=10)
print(scores.mean())enter code here
귀하의 질문을 읽기가 어렵습니다. 또한 오류를 잘못 해석합니다. ''''샘플 수가 일치하지 않는 배열을 찾는다 '는 것은 두 번째 (피처/컬럼)가 아니라 첫 번째 차원에서 문제가 있음을 의미합니다. 또한 첫 번째 부분의 코드 대부분은별로 의미가 없습니다. 왜 df-frame (whery no y가 처리되었는지)에 대한 훈련 만하는 전처리 객체를 준비하십시오. 순식간에 순열 배열에 집착하는 것이 더 쉬울 수도 있습니다. 어떤 일이 벌어지고 있는지 파악하기 위해 자신의 데이터를 시도하기 전에 먼저 scikit-learn 자습서를 작성하십시오. – sascha
의견에 감사드립니다. 나는 y를 식별하려고하는 클래스의 수를 기반으로 0 1의 배열로 변환해야한다는 인상을 받기 때문에 전처리 논리 만 사용하고 있습니다. X 데이터가 전혀 처리되지 않고 있습니다 ... –
나는이 문제를 해결했다고 믿습니다. 맞춤 함수가 동일한 함수 호출에서 모든 클래스에 적합하다고 가정합니다. 만약 내가 반복하고 각 클래스에 대한 모델을 가지고 그것이 작동하는 것. 나는 그때 가장 높은 확률을 예측하는 모델을 찾는다. –