Ошибка: пожалуйста, используйте имена столбцов для `x` при использовании caret () для логистической регрессии

Надеюсь, это поможет вам

import android.content.Context;
import android.graphics.Rect;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.widget.TextView;

/* Based on 
 * from http://stackoverflow.com/questions/2617266/how-to-adjust-text-font-size-to-fit-textview
 */
public class FontFitTextView extends TextView {

private static float MAX_TEXT_SIZE = 20;

public FontFitTextView(Context context) {
    this(context, null);
}

public FontFitTextView(Context context, AttributeSet attrs) {
    super(context, attrs);

    float size = this.getTextSize();
    if (size > MAX_TEXT_SIZE)
        setTextSize(MAX_TEXT_SIZE);
}

private void refitText(String text, int textWidth) {
    if (textWidth > 0) {
        float availableWidth = textWidth - this.getPaddingLeft()
                - this.getPaddingRight();

        TextPaint tp = getPaint();
        Rect rect = new Rect();
        tp.getTextBounds(text, 0, text.length(), rect);
        float size = rect.width();

        if (size > availableWidth)
            setTextScaleX(availableWidth / size);
    }
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
    refitText(this.getText().toString(), parentWidth);
    this.setMeasuredDimension(parentWidth, parentHeight);
}

@Override
protected void onTextChanged(final CharSequence text, final int start,
        final int before, final int after) {
    refitText(text.toString(), this.getWidth());
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    if (w != oldw) {
        refitText(this.getText().toString(), w);
    }
}
}

ПРИМЕЧАНИЕ. Я использую MAX_TEXT_SIZE, если размер текста больше 20, потому что я не хочу, чтобы большие шрифты применялись к моему представлению, если это не ваш случай, вы можете просто удалить его.

0
задан jmuhlenkamp 8 March 2019 в 07:15
поделиться

1 ответ

К сожалению, R имеет неприятное поведение, когда поднаставляет только один столбец, такой как df[,1], чтобы изменить результат на vector, и, поскольку у вас есть только один предиктор, вы столкнулись с этой функцией. Вы можете сохранить результаты как data.frame с помощью

trainSet[,predictors, drop = FALSE]

или

trainSet[predictors]

BTW. Есть два дополнительных вопроса с кодом:

  1. Первый аргумент должен быть предиктором, а не ответом
  2. Для логистической регрессии с caret ответ должен быть factor [1112 ]

Полный код должен быть:

library(caret)
df <- data.frame(response = sample(0:1, 200, replace=TRUE),  
                 predictor = rnorm(200,10,45)) 

df$response <- as.factor(df$response)

outcomeName <-"response"
predictors <- names(df)[!(names(df) %in% outcomeName)]
index <- createDataPartition(df$response, p=0.75, list=FALSE)
trainSet <- df[ index,]
testSet <- df[-index,]

model_glm <- train(trainSet[predictors], trainSet[[outcomeName]], method='glm', family="binomial", data = trainSet)

* изменен trainSet[,outcomeName] на trainSet[[outcomeName]] для более явного преобразования в vector

0
ответ дан kwiscion 8 March 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: