查找特征和目标列之间的关联

时间:2018-10-03 18:58:48

标签: python-3.x machine-learning scikit-learn linear-regression correlation

我正在尝试构建Regression模型,并且正在寻找一种方法来检查特征和目标变量之间是否存在任何关联?

这只是我的示例dataset

     Loan_ID    Gender  Married Dependents  Education Self_Employed ApplicantIncome\    

0   LP001002    Male    No         0        Graduate      No            5849    
1   LP001003    Male    Yes        1        Graduate      No            4583    
2   LP001005    Male    Yes        2        Graduate     Yes            3000    
3   LP001006    Male    Yes        0        Not Graduate  No            2583    
4   LP001008    Male    No         3+       Graduate      No            6000    

CoapplicantIncome  LoanAmount   Loan_Amount_Term  Credit_History Area Loan_Status
      0.0               123          360.0            1.0        Urban     Y
      1508.0          128.0          360.0            1.0        Rural     N
      0.0              66.0          360.0            1.0        Urban     Y
      2358.0          120.0          360.0            1.0        Urban     Y
      0.0             141.0          360.0            1.0    SemiUrban     Y

我正在尝试根据上述可用功能来预测LoanAmount列。

我只想看看功能和目标变量之间是否存在关联。我尝试过LinearRegressionGradientBoostingRegressor,但几乎没有达到0.30 - 0.40%的准确性。

我对算法,参数等有何建议,可以用来进行更好的预测?

2 个答案:

答案 0 :(得分:0)

使用pandas,您可以轻松检查要素与目标列之间的线性相关性:

    IEnumerable<string> WordWrap(string text, int width)
    {
        const string forcedBreakZonePattern = @"\n";
        const string normalBreakZonePattern = @"\s+|(?<=[-,.;])|$";

        var forcedZones = Regex.Matches(text, forcedBreakZonePattern).Cast<Match>().ToList();
        var normalZones = Regex.Matches(text, normalBreakZonePattern).Cast<Match>().ToList();

        int start = 0;

        while (start < text.Length)
        {
            var zone = 
                forcedZones.Find(z => z.Index >= start && z.Index <= start + width) ??
                normalZones.FindLast(z => z.Index >= start && z.Index <= start + width);

            if (zone == null)
            {
                yield return text.Substring(start, width);
                start += width;
            }
            else
            {
                yield return text.Substring(start, zone.Index - start);
                start = zone.Index + zone.Length;
            }
        }
    }

请记住,那将是线性相关。

答案 1 :(得分:0)

对于ApplicantIncomeCoapplicantIncome之类的连续变量,如果您只想查找相关性,则可以使用一些相关系数。最常见的是用于线性相关的Pearson和用于非线性相关的SpearmanKendall tau

关于实现,这些可以在pandas.DataFrame.corr()的熊猫中找到(我真的建议您使用熊猫,如果您还没有的话。)

关于连续关联的分类,不存在关联。您只能测量关联。

我没有足够的经验来使用这些工具,但是我知道您可以使用ANOVA或Kruskal-Wallis。如果愿意,请参考this answer

(我建议将此问题移至“交叉验证”。)