





# Logistic Regression from scratch

# In[62]:

# In[63]:

# importing all the required libraries

import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets


def        SCREAMING_SNAKE_CASE      (       _UpperCAmelCase )			->     Union[str, Any]:
    return 1 / (1 + np.exp(-z ))


def        SCREAMING_SNAKE_CASE      (       _UpperCAmelCase						,	_UpperCAmelCase )			->     Optional[Any]:
    return (-y * np.log(_UpperCAmelCase ) - (1 - y) * np.log(1 - h )).mean()


def        SCREAMING_SNAKE_CASE      (       _UpperCAmelCase						,	_UpperCAmelCase						,	_UpperCAmelCase )			->     List[Any]:
    lowerCamelCase__    :      List[Any]					 =		np.dot(_UpperCAmelCase						,	_UpperCAmelCase )
    return np.sum(y * scores - np.log(1 + np.exp(_UpperCAmelCase ) ) )


def        SCREAMING_SNAKE_CASE      (       _UpperCAmelCase						,	_UpperCAmelCase						,	_UpperCAmelCase						,	_UpperCAmelCase=7_0000 )			->     List[str]:
    lowerCamelCase__    :      str					 =		np.zeros(x.shape[1] )

    for iterations in range(_UpperCAmelCase ):
        lowerCamelCase__    :      List[str]					 =		np.dot(_UpperCAmelCase						,	_UpperCAmelCase )
        lowerCamelCase__    :      Union[str, Any]					 =		sigmoid_function(_UpperCAmelCase )
        lowerCamelCase__    :      Tuple					 =		np.dot(x.T						,	h - y ) / y.size
        lowerCamelCase__    :      List[Any]					 =		theta - alpha * gradient  # updating the weights
        lowerCamelCase__    :      List[str]					 =		np.dot(_UpperCAmelCase						,	_UpperCAmelCase )
        lowerCamelCase__    :      List[Any]					 =		sigmoid_function(_UpperCAmelCase )
        lowerCamelCase__    :      Optional[Any]					 =		cost_function(_UpperCAmelCase						,	_UpperCAmelCase )
        if iterations % 100 == 0:
            print(F"""loss: {j} \t""" )  # printing the loss after every 100 iterations
    return theta


# In[68]:

if __name__ == "__main__":
    _UpperCAmelCase				:       Optional[Any]	   =				datasets.load_iris()
    _UpperCAmelCase				:       Optional[int]	   =				iris.data[:, :2]
    _UpperCAmelCase				:       Tuple	   =				(iris.target != 0) * 1

    _UpperCAmelCase				:       List[Any]	   =				0.1
    _UpperCAmelCase				:       str	   =				logistic_reg(alpha, x, y, max_iterations=7_00_00)
    print("""theta: """, theta)  # printing the theta i.e our weights vector


    def        SCREAMING_SNAKE_CASE      (       _UpperCAmelCase )			->     List[Any]:
        return sigmoid_function(
            np.dot(_UpperCAmelCase						,	_UpperCAmelCase ) )  # predicting the value of probability from the logistic regression algorithm

    plt.figure(figsize=(10, 6))
    plt.scatter(x[y == 0][:, 0], x[y == 0][:, 1], color="""b""", label="""0""")
    plt.scatter(x[y == 1][:, 0], x[y == 1][:, 1], color="""r""", label="""1""")
    ((_UpperCAmelCase)   ,(_UpperCAmelCase))				:       str	   =				(x[:, 0].min(), x[:, 0].max())
    ((_UpperCAmelCase)   ,(_UpperCAmelCase))				:       Optional[int]	   =				(x[:, 1].min(), x[:, 1].max())
    ((_UpperCAmelCase)   ,(_UpperCAmelCase))				:       Union[str, Any]	   =				np.meshgrid(np.linspace(xa_min, xa_max), np.linspace(xa_min, xa_max))
    _UpperCAmelCase				:       Any	   =				np.c_[xxa.ravel(), xxa.ravel()]
    _UpperCAmelCase				:       List[str]	   =				predict_prob(grid).reshape(xxa.shape)
    plt.contour(xxa, xxa, probs, [0.5], linewidths=1, colors="""black""")

    plt.legend()


    plt.show()












# Copyright 2021 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import argparse
import os

from accelerate.test_utils import execute_subprocess_async


def        SCREAMING_SNAKE_CASE      (       _UpperCAmelCase=None )			->     Tuple:
    if subparsers is not None:
        lowerCamelCase__    :      Any					 =		subparsers.add_parser('test' )
    else:
        lowerCamelCase__    :      int					 =		argparse.ArgumentParser('Accelerate test command' )

    parser.add_argument(
        '--config_file'						,	default=_UpperCAmelCase						,	help=(
            'The path to use to store the config file. Will default to a file named default_config.yaml in the cache '
            'location, which is the content of the environment `HF_HOME` suffixed with \'accelerate\', or if you don\'t have '
            'such an environment variable, your cache directory (\'~/.cache\' or the content of `XDG_CACHE_HOME`) suffixed '
            'with \'huggingface\'.'
        )						,	)

    if subparsers is not None:
        parser.set_defaults(func=_UpperCAmelCase )
    return parser


def        SCREAMING_SNAKE_CASE      (       _UpperCAmelCase )			->     Union[str, Any]:
    lowerCamelCase__    :      Tuple					 =		os.path.sep.join(__file__.split(os.path.sep )[:-2] + ['test_utils', 'scripts', 'test_script.py'] )

    if args.config_file is None:
        lowerCamelCase__    :      List[str]					 =		script_name
    else:
        lowerCamelCase__    :      List[Any]					 =		F"""--config_file={args.config_file} {script_name}"""

    lowerCamelCase__    :      str					 =		['accelerate-launch'] + test_args.split()
    lowerCamelCase__    :      Dict					 =		execute_subprocess_async(_UpperCAmelCase						,	env=os.environ.copy() )
    if result.returncode == 0:
        print('Test is a success! You are ready for your distributed training!' )


def        SCREAMING_SNAKE_CASE      (       )			->     Any:
    lowerCamelCase__    :      Any					 =		test_command_parser()
    lowerCamelCase__    :      List[Any]					 =		parser.parse_args()
    test_command(_UpperCAmelCase )


if __name__ == "__main__":
    main()





