{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Boston Wohnungsgrundstueck-Preise\n", "\n", "Hier wird exemplarisch gezeigt, wie scikit-learn für eine Aufgabe wie eine lineare Regression eingestetzt werden kann." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sklearn\n", "import sklearn.datasets\n", "import sklearn.linear_model\n", "import sklearn.metrics\n", "import sklearn.model_selection\n", "\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Das Modul `sklearn` heißt in Lang `scikit-learn` und beinhaltet bereits einige Datensätze.\n", "Die Hauspreise von Boston sind nun ein Beispiel." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Boston House Prices dataset\n", "===========================\n", "\n", "Notes\n", "------\n", "Data Set Characteristics: \n", "\n", " :Number of Instances: 506 \n", "\n", " :Number of Attributes: 13 numeric/categorical predictive\n", " \n", " :Median Value (attribute 14) is usually the target\n", "\n", " :Attribute Information (in order):\n", " - CRIM per capita crime rate by town\n", " - ZN proportion of residential land zoned for lots over 25,000 sq.ft.\n", " - INDUS proportion of non-retail business acres per town\n", " - CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n", " - NOX nitric oxides concentration (parts per 10 million)\n", " - RM average number of rooms per dwelling\n", " - AGE proportion of owner-occupied units built prior to 1940\n", " - DIS weighted distances to five Boston employment centres\n", " - RAD index of accessibility to radial highways\n", " - TAX full-value property-tax rate per \$10,000\n", " - PTRATIO pupil-teacher ratio by town\n", " - B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\n", " - LSTAT % lower status of the population\n", " - MEDV Median value of owner-occupied homes in \$1000's\n", "\n", " :Missing Attribute Values: None\n", "\n", " :Creator: Harrison, D. and Rubinfeld, D.L.\n", "\n", "This is a copy of UCI ML housing dataset.\n", "http://archive.ics.uci.edu/ml/datasets/Housing\n", "\n", "\n", "This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\n", "\n", "The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\n", "prices and the demand for clean air', J. Environ. Economics & Management,\n", "vol.5, 81-102, 1978. Used in Belsley, Kuh & Welsch, 'Regression diagnostics\n", "...', Wiley, 1980. N.B. Various transformations are used in the table on\n", "pages 244-261 of the latter.\n", "\n", "The Boston house-price data has been used in many machine learning papers that address regression\n", "problems. \n", " \n", "**References**\n", "\n", " - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\n", " - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", " - many more! (see http://archive.ics.uci.edu/ml/datasets/Housing)\n", "\n" ] } ], "source": [ "boston = sklearn.datasets.load_boston()\n", "print(boston.DESCR)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Der Datensatz wird nun in einen Trainings-Datensatz und einen Test-Datensatz aufgeteilt." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "X_train, X_test, Y_train, Y_test = sklearn.model_selection.train_test_split(\n", " boston.data, boston.target, test_size=0.33)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploration des Trainings-Datensatzes\n", "\n", "Zunächst visualisieren wir die Werte.\n", "`Y_train` ist die Zielvariable, also `MEDV`, sprich \"Median value of owner-occupied homes in \$1000's\"" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "